본문 바로가기

Spring6

스프링 환경설정 셋팅 1. Build and run using, Run tests using 2개의 값을 IntelliJ IDEA로 변경하면 인텔리제이가 직접 자바 프로젝트를 실행하고, 조금 더 빨리 로드됩니다. 2. 스프링 부트 3.2부터 자바 컴파일러에 -parameters 옵션을 넣어주어야 애노테이션의 이름을 생략할 수 있다. 주로 아래의 애노테이션을 사용할 때 문제가 발생한다. @RequestParam, @PathVariable, @Autowired, @ConfigurationProperties 해결 방안1) 애노테이션에 이름을 생략하지 않고 다음과 같이 이름을 항상 적어준다. @RequestParam("username") String username @PathVariable("userId") String userId.. 2024. 4. 18.
Controller에서 여러 인자를 받는 방법 @RequestParam은 말 그대로 요청 파라미터를 받아올 때 사용하는 어노테이션입니다. 여러 개의 변수를 받아와야 할 때는 Map 또는 List 형식으로 받아와야 하는 것은 아니며, 컨트롤러 메서드의 인자에 각각 변수명을 지정해줘서 받아올 수 있습니다. 예를 들어, 아래와 같이 컨트롤러 메서드를 작성할 수 있습니다. @GetMapping("/example") public String getExample(@RequestParam("param1") String param1, @RequestParam("param2") String param2) { // param1과 param2를 이용한 로직 처리 return "example"; } 이렇게 작성하면 요청 URL에 “param1”과 “param2”라는 파라.. 2024. 3. 5.
URL로 파라미터를 전달하는 2가지 방법-PathVariable/RequestPar GET http://youngjinmo.github.io/member?id=2 // type 1 GET http://youngjinmo.github.io/member/2 // type 2 스프링부트에서 URL로 파라미터를 전달하는 두가지 방식이 있다. type 1의 방식이 쿼리 스트링을 적용한 방식이고, type 2가 REST하게 이용하는 방식이다. type 1번처럼 요청을 할 경우에 추가적인 파라미터가 존재할 경우 /api/v1/pet?id=XXX¶m=YYY와 같이 변하고, type 2번의 경우에는 추가적인 파라미터가 존재할 경우 /api/v1/pet/XXX/YYY 와 같은 형태로 변형된다. 따라서 type 2번의 경우에는 입력받을 파라미터가 많이 존재한다면 어떤 값이 입력되는지 알기가 쉽지 않.. 2024. 3. 5.
페치조인(Fetch Join) 참고 https://kihwan95.tistory.com/12 페치조인(fetch Join )이란 페치(fetch)조인은 SQL에서 사용하는 조인의 종류는 아니고 JPQL에서 성능 최적화를 위해 제공하는 기능입니다. 이것은 연관된 엔티티나 컬렉션을 한 번에 같이 조회하는 기능인데 join fetch 명령어 kihwan95.tistory.com 페치 조인 (Fetch Join)은 SQL에서 사용하는 조인의 종류는 아니고 JPQL에서 성능 최적화를 위해 제공하는 기능입니다. 이것은 연관된 엔티티나 컬렉션을 한 번에 같이 조회하는 기능인데 join fetch 명령어로 사용할 수 있습니다. JPQL은 결과를 반환할 때 연관관계까지 고려하지 않는다. 단지 SELECT 절에 지정한 엔티티만 조회할 뿐이다 따라서 M.. 2024. 2. 20.
[Spring] Service, 인터페이스 사용하는 이유? 개요 지금 진행하고 있는 Socket 이라는 사이드프로젝트를 계획할때, 같은 백엔드 팀원과 최대한 객체지향성을 지키면서 코딩을 하자고 했었다. 그래서 Service에서도 인터페이스를 만들어 진행해 왔다. 이 부분에 대해서 조금더 자세히 파고들어가보자 한다. 그렇다면 왜 예전부터 서비스에 인터페이스를 습관적으로 사용하였을까? 예전에는 Spring 에서 AOP Proxy 를 만드는 방식이 JDK Dynamic Proxy 를 사용하여 인터페이스 기반으로만 만들게 되어 있었다. 예를 들어, 인터페이스가 있어야지 @Transactional 이런 어노테이션이 동작이 가능하기 때문이다. (AOP Proxy 만들어서 트랜잭션을 처리하기 때문에) 특정 버전부터 CGLIB 라이브러리를 사용하여, 클래스 기반으로 AOP P.. 2024. 1. 25.
[Spring] @Transactional에 private 접근 제한자가 불가능한 이유 개요 Socket 사이드 프로젝트를 진행하던 중 git에 push를 하기 전에 외부 패키지에서 사용할 일이 없는 메소드의 경우 private로 접근제한자를 설정하기 위해서 살펴보던 와중에, 아래와 같이 @Transaction이 붙은 메소드는 private 접근 제한자가 불가능한것을 발견했다. 그리고 아래와 같은 오류메시지를 알려줬다. Methods annotated with '@Transactional' must be overridable. @Transactional은 spring AOP를 사용하여 구현되는데 기본적으로 AOP는 proxy패턴 을 사용하여 구현이 된다. 결론부터 말하자면, 1. spring의 @Transactional은 proxy로 동작한다. 2. 그러므로 private 사용이 불가하다... 2024. 1. 25.