SKSDUD

0911 월요일 - 고난과 역경(1) 본문

카테고리 없음

0911 월요일 - 고난과 역경(1)

NYinJP 2023. 9. 11. 17:32

경험한 고난과 역경을 기록하고자 합니다.

이 또한 지나가리라

 

바보 같은 일 

1. 

Unmapped target properties: "children, removeChildren". warning

매핑되지 않는 속성 오류 로그

의도한 대로 매핑을 하지 않은 경우 무시해도 된다. 오류 로그를 없앨 수도 있다.

@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)

그 외

WARN : 빌드 중 경고 메시지(Default)

ERROR : 매핑되지 않은 대상 속성은 빌드에 실패

 

2. 

EC2 인스턴스 재시작/재부팅과 IP 주소 변경에 관하여

실무에서 IP 주소 변경 절 대 금 지

 

EC2를 사용해 가상 서버를 구축하고, 보안 및 네트워킹을 구성해 보다 빠르게 애플리케이션을 개발하고 배포할 수 있다.

보안그룹은 EC2 인스턴스에 허용되는 인바운드, 아웃바운드 트래픽을 제어하는 가상 방화벽이다.

 

인스턴스를 중지하고 재시작하면 새로운 IP가 할당되기 때문에 고정적인 IP를 가질 수 있도록 탄력적 IP 주소를 할당해 줘야 한다. 

 

참고

- 아이피 고정: 인스턴스 재부팅
- 아이피 변경: 인스턴스 중지 > 인스턴스 시작

 

3.

[Project] 인증과 DB 조회와 Postman

Postman으로 application 잘 동작하는지 테스트 중인데

(내가 개발 환경 구성은 잘 했는지)

GET 요청 시 html 코드가 200 Ok와 함께 반환된다.

DB 내용을 보내줘야 하는데 이유가 뭘까?

그냥 리스트로 보내주는 간단한 DB 조회인데 html 코드로 반환된다(멍청)


👀

HTTP Status Code(상태 코드) 

HTTP에서 클라이언트의 요청에 대한 서버의 응답 코드. 상태 코드에 따라 요청의 성공/실패 여부를 판단한다.

상태 코드의 첫 번째 숫자에 따라 크게 5가지로 분류된다.

1xx : (Informational) 조건부 응답

2xx : (Successful) 성공

3xx : (Redirection) 리다이렉션 완료

4xx : (Client Error) 요청 오류

5xx : (Server Error) 서버 오류

 

여기서 2xx (Successful) 은 요청을 성공적으로 처리했음을 의미한다.

상태 코드 요약 설명
200 Ok 요청이 성공적으로 수행되었음을 의미합니다. 주로 GET 요청에 대한 응답 입니다.
201 Created 요청이 성공적으로 수행되었으며, 그 결과로 새로운 리소스가 생성됨을 의미합니다. 주로 POST 요청에 대한 응답 입니다.

200 Ok 상태코드로 GET 요청에 대한 응답이 잘 돌아왔을 텐데 왜 response body가 html 코드인지 해결해야 한다.


@RequestMapping("/api")

url 잘못 연결한 문제

➡️ 401 Unauthorized(리소스를 접근할 자격이 없다는 뜻/유효한 인증 자격 증명이 없어서)

로그인을 해서 인증된 사용자가 되어야 한다.

"full authentication is required to access this resource"

 

결국은 내가 멍청한 거였다. 🤦‍♀️ 

...

 

username과 password로 애플리케이션에 로그인한다.

UserJWTController에서 해당 url을 확인할 수 있다.

 

# loginVM 
package com.jeju.greenhouse.web.rest.vm;
# UserJWTController
package com.jeju.greenhouse.web.rest;

 

해당 url에 알맞은 username과 password를 통해 post 요청을 보내면 access 토큰과 refresh 토큰을 response로 받을 수 있다. 

Auth.type(Bearer Type).Token(access token)을 넣고 위의 url에 GET 요청을 보내면 Board DB의 내용을 잘 보내준다. 

 

JHipster로 완성된 코드를 보다 보니 파악이 쉽지 않은 건지 내가 바보인 건지(후자인 듯)

 

Spring Security 다시 공부!

 

4.

DBeaver backup/restore : 데이터베이스 백업하기/복원하기

Binaries 파일 설정 문제

 

👀 해결 참고 문서

 

DBeaver Documentation

DBeaver User Guide with detailed manuals, tips, and overviews of features and supported databases. Use the table of content to find information shortly.

dbeaver.com

 

5. 

JHipster로 구성한 Spring boot 프로젝트 컨트롤러 위치

com.jeju.greenhouse. web.rest 아래에

OO(어쩌구저쩌구)Resource 클래스 파일이 컨트롤러이다. 

 

6.

[IntelliJ] Spring run 버튼 비활성화

인텔리제이 Spring boot 프로젝트 실행버튼이 비활성화되는 문제

 

이것저것 설정 바꾸고

재시작해주니까 적용 잘 되었다.

버전관리도 어렵구나...... 어

 

👀 해결 참고 문서

 

[스프링 입문] intellij run 비활성화 해결

김영한의 스프링 입문 - 프로젝트 생성 단계에서 run 비활성화 문제가 발생함 Main > edit configuration

velog.io

 

7.

[Project] 쿼리문에 관하여

Query란 직역 하면 "질의문"이라는 뜻으로. 풀어쓰자면 저장된 데이터를 필터링하기 위한 질문을 말한다.

 

유지보수(SM) 업무에서 쿼리를 수정할 일이 얼마나 있을지 어떻게 수정해야 할지 감이 잘 오지 않는다.

우선 이 프로젝트에서 쿼리문이 쓰이는 방식에 대해 분석해보겠다.

 

JPA에서 쿼리를 쓰는 경우

repository 계층에서 사용할 것이다. DB에 어떠한 값을 넣거나, 값 조회하는 방법을 정의해주는 계층. 

 

 

👀 해결 참고 문서

 

JPA에서 쿼리를 쓰는 법

JPA에서 쿼리를 쓰는 법 KeywordSampleJPQL snippet `And` `findByLastnameAndFirstname` `… where x.lastname = ?1 and x.firstname = ?2` `Or` `findByLastnameOrFirstname` `… where x.lastname = ?1 or x.firstname = ?2` `Is`, `Equals` `findByFirstname`,`

wonin.tistory.com

 

8.

실행창에서 한글이 깨지는 문제

진작에 검색해서 인코딩 설정들 UTF-8 로 다 바꾼거같은데 문제가 뭘까?

Like this

👀 해결 참고 문서

 

IntelliJ 한글 깨짐 문제 해결(file 과 console encoding 설정)

 

www.lesstif.com

 

잘 알려진 file/console encoding 방법으로는 해결이 안되어서

VM 옵션을 참고한 자료대로 설정해주었더니 해결되었다. 와우

 

9.

빌더 패턴이란?

 

👀 참고

 

빌더 패턴(Builder pattern)을 써야하는 이유, @Builder

빌더 패턴(Builder pattern)이란? 객체를 정의하고 그 객체를 생성할 때 보통 생성자를 통해 생성하는 것을 생각한다. Bag bag = new Bag("name", 1000, "memo"); 하지만 생성자를 통해 객체를 생성하는데 몇 가

pamyferret.tistory.com

 

객체를 정의하고 그 객체를 생성할 때 보통 생성자를 통해 생성하는 것을 생각한다. 하지만 생성자를 통해 객체를 생성하는데 몇 가지 단점이 있어 객체를 생성하는 별도 builder를 두는 방법이 있다. 이를 빌더 패턴이라고 한다.

.build() 메서드를 통해 객체 생성.  

 

장점

  • 생성자 파라미터가 많을 경우 가독성이 좋지 않다. 
  • 어떤 값을 먼저 설정하던 상관이 없다. 

@Builder 어노테이션

해당 클래스에 해당하는 엔티티 객체를 만들 때 빌더 패턴을 이용해서 만들 수 있도록 지정해주는 어노테이션이다.

Board.builder() : 여러가지 필드의 초기값 선언

.build() : 객체 생성

 

10.

레포지토리란?

 

👀 엄청 좋은 블로그 

 

스프링 부트 : 기본 개념 1) Entity, Repository 개념

개인적인 정리와 기록을 위한 글이다. 혹시라도 참고해주시는 분들께서는 정확하지 않은 내용이 있을 수 있으니 유의해주시길 바란다. 자바 진영의 백엔드 개발을 아무런 지식없이 시작하게 되

whitepro.tistory.com

Entity에 의해 생성된 DB에 접근하는 메서드들을 사용하기 위한 인터페이스이다. 위에서 엔티티를 이용해 데이터베이스 구조를 만들었다면, 여기에 어떤 값을 넣거나 넣어진 값을 조회하는 등의 CRUD(Create, Read, Update, Delete)를 해야 의미가 있다. 이것을 어떻게 할 것인지 정의해주는 계층이 바로 이 Repository 인터페이스이다. 쿼리문도 여기에 쓰이는 듯. 

 

/**
 * Spring Data SQL repository for the Board entity.
 */
@SuppressWarnings("unused")
@Repository
public interface BoardRepository extends JpaRepository<Board, Long>, JpaSpecificationExecutor<Board> {}

JpaRepository를 상속받음으로써 기본적인 동작(save(), findAll(), get() 등)이 가능해진다. 

 

 

 

바보같은 나!

요상한 부분에서 감명을 받았다.