WEB/Spring

    [Spring] 패키지 구조

    고민 전에 프로젝트를 진행하면서 패키지를 어떤 기준으로 나누어 만들어야 효율적인지 고민을 했다. 처음에는 컨트롤러, 서비스, 레포지토리 등으로 나누었고 다음은 조금 더 간결하고 모아지도록 M,V,C 각각 패키지로 만들었다. 하지만 프로젝트 크기가 커지면서 도메인마다의 MVC가 생겨났다. 그러면서 어떻게 해야 찾기에도 편하면서 관리하기 좋을까? 고민을 하던 당시에는 가장 좋은 효율을 찾던 중 맡은 기능별로 나누어 관리했다. 지금와서 생각해보면 결론적으로 도메인을 기준으로 나누어 진행했었다. 종류 패키지를 구조적으로 계층형과 도메인형으로 나뉜다. 계층형 구조 처음 내가 진행했던 방법은 계층형 구조이다. 계층형 구조는 작은 프로젝트에 유용하며 전체적인 구조를 빠르게 파악할 수 있다. 하지만 하나의 디렉토리에 ..

    [Spring Boot] Spring boot EC2에 배포하기

    Java JAVA JDK, JRE 설치 및 환경설정 AWS EC2 AWS EC2 에 스프링 부트를 배포하자. 먼저 저자는 Maven 사용했기 때문에 package 를 더블클릭해서 실행하면 배포를 하게되고 아래 콘솔에 나온 경로로 이동해서 server-0.0.1-SNAPSHOT.jar 파일을 찾는다. 이 파일이 배포 파일이다. (설정에 따라 war 일 수도 있음) EC2로 해당 파일을 옮긴 후 java -jar server-0.0.1-SNAPSHOT.jar 를 입력하여 실행하면 스프링 부트가 실행된다. 이 실행을 백그라운드로 돌리기 위해서는 nohup java -jar server-0.0.1-SNAPSHOT.jar & 이렇게 입력해준다. 만약 스프링을 배포한다면 톰캣을 설치하고 webapps 폴더 내에 해..

    [Spring] RestTemplate Response Entity Type

    RestTemplate Spring에서 RestAPI로 통신을 할 수 있는 방법은 두가지가 있다. Spring 3 부터 적용 가능한 Rest Template, Spring 5 부터 적용 가능한 Web Client 각각의 방법을 차후에 포스트로 작성할 예정 이번에는 Rest Template 객체를 사용한 통신 중에 내가 지정한 클래스에 응답 객체를 매핑하게 되는데... 이 부분에서 오류가 발생했다. 제네릭을 사용한 클래스인 List.class 를 반환 타입으로 주고, 이 객체를 for문을 통해 List의 요소를 하나씩 꺼내와서 기능을 수행했다. List는 List 형식으로 되어서 FileEntity.class 로의 매핑이 필요했다. 이 때 사용한 방법으로 com.fasterxml.jackson.databi..

    [Spring] AOP - 구현

    AOP를 스프링을 이용해 구현해보자. IntelliJ와 Spring5를 사용한다. 일단 환경설정을 위해서 pom.xml에 org.aspectj aspectjweaver 1.7.4 이 dependency를 추가해준다. 버전은 알아서. 기본 개념을 바탕으로 어노테이션을 사용하지 않는 코드부터 구현해보자. advice의 종류 중에서 around를 사용해보자. 어노테이션을 사용하지 않으므로 resources 폴더에 xml 파일을 만들어 관리한다. 먼저 파일을 만들어둔다. 그리고 핵심 기능을 할 클래스와 메서드들을 각각 만들어두고 공통적인 기능을 할 메서드들을 모아둘 클래스를 만들어준다. 나는 Student 클래스에 이름과 나이를 필드값에 두고 getStudentInfo 라는 필드값을 가져오는 메서드를 두었다. ..

    [Spring] AOP의 기본 개념

    AOP란? 관점 지향 프로그래밍으로 어떤 로직을 공통적인 기능과 핵심적인 기능을 분리해서 관리하도록 프로그래밍하는 것이다. 이런 그림으로 표현할 수 있다. 위를 보면 공통적으로 사용하는 기능을 분리해서 관리하는 것을 볼 수 있다. 우리가 지금까지 사용했던 함수(메서드)들과 비슷한 모습으로 보인다. 여기서 우리는 공통적인 기능들을 Aspect라 하고 그 기능 자체를 Advice라 한다. 이 Advice가 적용되는 부분은 메서드, 필드 등이 있는데 스프링에서는 메서드만 적용 가능하다. 그리고 이것을 Joinpoint라 한다. 그리고 Pointcut을 통해 Joinpoint에서 Advice가 실행될 지점을 더욱 구체적으로 정할 수 있다. 실제로 구현할 때는 프록시 패턴을 기반으로 구현하게 되는데, Client..