본문 바로가기
  • 시 쓰는 개발자

Spring21

스프링 느낀점 - 2023.03.07. 작성 옛날에 메모했던 걸 보며 내용을 바로잡기 위해 블로그에 기록해둡니다. (23년 3월 메모)날짜표시가 따로 없는 건 과거의 메모니까, 틀린 내용이 다수 포함될 수 있음. 성공/실패 메세지>> 성공, 실패 여부에 대한 메세지를 항상 같이 넘겨주는 것이 무조건 좋다고 생각이 된다. 그래야 postman으로 검사할 때도 편하고 어디서 뭐때문에 실패했는지 내가 직접 넘겨줄 수 있기 때문에 훨씬 편하다.→ print로 찍을 수도 있는데, log.info로 로그를 남겨주는 것이 더 좋은듯하다.  API 명세서>> api 명세서는 거의 무조건 postman으로 관리하는 게 맞다. notion에 관리를 같이 해도 되는데, 노션은 사용해도 되고 안해도 된다면 postman은 무조건 해야하는 것 같다 그래야 기능확인하기도 .. 2024. 5. 9.
JPA N+1 문제 여러 인터넷 내용들을 참고하여 정리하였습니다.[개발면접3분] N+1 문제와 해결방법https://www.youtube.com/watch?v=B0iYvMJ6eG4  [10분 테코톡] 수달의 JPA N+1 문제https://www.youtube.com/watch?v=ni92wUkAmQIN+1 문제 : ORM 사용시 발생하는 쿼리 문제. 1개의 쿼리문에 N개의 추가 쿼리문이 요청되어 성능이 저하되는 것을 의미한다. 즉, 1+N 문제이다.OneToMany 예시 (게시글-댓글 상황)>> 1단계게시글 - 댓글처럼 OneToMany 관계에서 Lazy 로딩을 적용한 상황을 생각해보자. 그럼 게시글을 조회했을 때, 아직 댓글은 안받아오니까 댓글을 proxy 객체로 가지고 있다. 근데 만약 이 상황에서 댓글을 조회한.. 2024. 5. 5.
annotation 정리 생성자 관련 annotation - OOOArgsConstructor @RequiredArgsConstructor final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만들어줌. @AllArgsConstructor 모든 필드 값을 파라미터로 받는 생성자를 만들어줌. 파라미터를 다 받아야함. 근데 이렇게 하면 필요한 걸 빠뜨리지 않고 객체를 만들 수는 있겠지만 다 넣어야 해서 오히려 객체 만들기 자체가 어려울 수 있음. @NoArgsConstructor 파라미터 아무것도 없는 기본 생성자. 이게 있어야 jpa가 테이블을 만들어줌. 객체화 하려면 생성자가 있어야하는데, 파라미터를 넘겨줘야만 객체를 만들 수 있는 상황이라면 객체를 쉽게 만들 수가 없고 그렇게 되면 테이블에 넣을 수 없기 때문에,.. 2024. 3. 11.
Controller vs RestController @Controller @Controller는 보통 Spring MVC 패턴에서 view를 반환할 때 사용된다. home.html같이 view를 반환할 때는 Controller를 써도 되지만, 데이터를 반환한다면 Controller만으로는 부족하다. 그래서 필요한 것이 바로 @ResponseBody이다. 이것과 Controller를 함께 달아주면 데이터를 반환할 수 있다. 다만, 이 두개를 합쳐놓은 것이 RestController이다. @RestController (= @ResponseBody + @Controller) Controller와 ResponseBody를 합쳐놓은 것이 RestController이다. 그렇기때문에 @ResponseBody라는 어노테이션 없이도 @RestController만으로도 .. 2024. 3. 9.
RequestBody, ResponseBody @RequestBody , @ResponseBody 클라이언트가 서버로 요청을 보내는 경우 RequestBody를, 서버가 클라이언트로 응답을 보낼 때는 ResponseBody를 사용한다. 이때 객체를 반환시 자동으로 JSON변환 되어 반환된다. 클라이언트 → 서버 (RequestBody) @RequestBody을 써서 요청 데이터를 서버로 보내면, HTTP 바디 부분에 있는 내용들을 java객체로 변환시켜서 객체로 저장한다. 서버 → 클라이언트 (ResponseBody) @ResponseBody을 써서 응답 데이터를 클라이언트로 보내면, 데이터를 객체로 변환하여 HTTP 바디 부분에 넣으면서 클라이언트로 전송한다. HttpMessageConverter 이렇게 뷰가 아니라 객체를 반환하기 때문에 view.. 2024. 3. 8.
Bean에 대하여 IoC 글에서 이미 썼던 내용이지만, Bean에 대한 내용만 따로 쓰고싶었고, 그중에서도 자주 들여다볼 내용만 따로 추려냈다. Bean에 대한 내용들을 더 추가해보려 한다. Bean 빈 : 스프링 컨테이너(IoC컨테이너)가 관리하는 객체 빈 팩토리 : 빈들을 관리하는 컨테이너 컨테이너 : 객체들이 담긴 공간을 의미한다. 객체의 생명주기를 관리하여 개발자는 로직에만 집중할 수 있게 도와준다. 왜 Bean으로 등록할까? Bean은 IoC컨테이너가 관리하는 객체이다. 객체별로 빈인 객체도 있고, 빈이 아닌 객체도 있을 것이다. 단순히 객체를 만들었다고 해서 다 빈은 아니라는 것이다. 스프링이 말하는 Bean이란, ApplicationContext가 "알고있는" 객체이다. 그리고 위에서 언급했듯이 그러한 빈끼리.. 2024. 3. 8.
Portable Service Abstraction 백기선님의 스프링 강의를 듣고 작성하였습니다. 내용이 어려워서 종종 내용 확인해보고 틀린 부분은 보완하겠습니다. 스프링 핵심 3요소(Spring Triangle) 中 "서비스 추상화", PSA(Portable Service Abstraction)에 대해서 알아보자. PSA : 내부 동작을 추상화 PSA는 한마디로 "잘 만든 인터페이스"이다. 단어에서도 알 수 있듯이, 서비스를 추상화하는 작업이다. 잘 추상화 해놓았기 때문에 우리는 Low Level을 직접 다룰 일이 적다. 예를 들어 우리는 서블릿을 기반으로 두고 있음에도 불구하고 코딩할 때 Servlet이나 HttpServlet을 쓰지 않는다. 이것을 모두 Spring 웹 MVC에서는 @GetMapping, @PostMapping 등이 대체하고 있기 때.. 2024. 3. 4.
Aspect Oriented Programming 백기선님의 스프링 강의를 듣고 작성하였습니다. 내용이 어려워서 종종 내용 확인해보고 틀린 부분은 보완하겠습니다. 스프링 핵심 3요소(Spring Triangle) 中 "관점 지향 프로그래밍", AOP(Aspect Oriented Programming)에 대해서 알아보자. AOP : 공통적인 일을 분리한다. AOP에서 말하는 Aspect는 측면, 관점이라기 보다는 "여러 객체에 공통으로 적용되는 공통 관심사항"이다. 따라서 이런 공통 관심사항을 고려하며 프로그래밍하는 것이 바로 AOP이며, 더 정확히는 이런 공통되는 일을 분리하여 효율성을 높이는 방식을 의미한다. 만약 A작업 → 메세지 출력 → B작업 이런 flow가 있다고 하자. 이 구조가 여러 곳에서 쓰인다면 메세지 출력 부분만 다르고 A, B는 반복.. 2024. 3. 4.
Inversion of Control (Bean내용 포함) 백기선님의 스프링 강의를 듣고 작성하였습니다. 내용이 어려워서 종종 내용 확인해보고 틀린 부분은 보완하겠습니다. 스프링 핵심 3요소(Spring Triangle) 中 "제어의 역전", IoC(Inversion of Control)에 대해서 알아보자. IoC : 의존성 관리를 외부에서 해준다. 한마디로 메소드나 객체의 호출을 개발자가 결정하는 것이 아니라 외부에서 결정하는 것이다. 예를 들어 다음과 같은 코드를 보자. class Owner{ private OwnerRepository repo; public Owner(OwnerRepository repo) { this.repo = repo; } } Owner 클래스에서는 분명히 OwnerRepository를 사용하는데, 객체를 직접 생성하고 있진 않다. 생.. 2024. 3. 3.