전체 글

전체 글

    Monolithic의 한계, MSA 장단점과 Multi Module 사용 이유

    Monolithic Architecture 왼쪽처럼 하나의 DB와 하나의 프로젝트로 모든 서비스가 구성되어 있는 구조가 Monolithic 구조이다. 흔히 나처럼 대학생이나 부트캠프 등에서 프로젝트를 진행하면 거의 대부분 이런 하나의 프로젝트로 진행했을 것이다. MSA, Multi Module을 사용하는 이유를 알아보려면 해당 구조의 장단점을 알아야 왜 사용하는지 이해가 된다고 생각한다. Monolithic Architecture 장점 배포 과정이 간단하다.(파이프라인 구성이 쉽다) 하나의 프로젝트만 관리하니 배포하는 과정이 비교적 간단하고 쉽다. 통합 테스트를 하기 용이하다. 하나의 프로젝트에 전체 서비스의 로직이 같이 관리되기 때문에 단위 테스트가 아닌 통합 테스트에 유리하다. 프로젝트의 규모가 작을..

    Spring Security + JWT 적용하기(3) - 게시판 만들기(12)

    로그인 구현 마지막 기능으로 로그아웃과 내 개인적인 보안 강화?를 적용해 보겠다. 우선 내 로그인 로직은 클라이언트가 로그인을 한다. 로그인 성공하면 accessToken, refreshToken을 건네준다. accessToken이 만료되면 로그인 유지를 위해 refreshToken으로 재발급 요청을 보낸다. refreshToken이 유효하면 accessToken을 발급한다. refreshToken이 유효하지 않다면 토큰을 만료시키고 강제 로그아웃 처리를 한다. 크게 이런 흐름이다. 내가 생각한 나름의 보안 강화는 4번에 적용시켰고, refreshToken이 유효해도 accessToken이 유효하지 않다면 비정상적인 접근으로 판단하여 강제 로그아웃 처리를 하였다. 이후 해당 accessToken은 따로 ..

    Spring Security + JWT 적용하기(2) - 게시판 만들기(11)

    Spring Security에 JWT를 붙이기 전에 JWT를 먼저 발급해 보겠다. 로그인 시 JWT 발급하기 먼저 JWT에 대한 작업을 할 클래스를 하나 생성한다. Security와 같은 모듈에서 utils 패키지를 만들어 관리를 할 것이다. 그러기 전에 먼저 의존성을 추가해 준다. build.gradle (common-authentication 모듈) dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' //Spring Security implementation 'io.jsonwebtoken:jjwt:0.9.1' } jjwt 가 java json web. token이라고 한다. utils/JwtUtil ..

    Spring Security + JWT 적용하기(1) - 게시판 만들기(10)

    코드를 작성하기 전에 Spring Security가 무엇이고 왜 사용해야 하는지 알아보았다. Spring Security란? Spring 기반으로 어플리케이션 보안(인증, 권한, 인가 등) 기능을 제공하는 스프링 하위 프레임워크. Spring Security는 인증과 권한에 대한 부분을 Filter 흐름에 따라 처리한다. 이 Filter는 Dispatcher Servlet으로 가기 전에 적용되기 때문에 가장 먼저 URL의 요청을 받는다. Interceptor와는 다른 점이 Interceptor는 Dispatcher Servlet과 Controller 사이에 위치하기 때문에 적용되는 시점이 다른 차이가 있다. Spring Security는 보안과 관련하여 쳬계적으로 많은 옵션을 제공하기 때문에 개발자의 입..

    Nginx와 Docker 배포 과정 이슈 해결 및 Nginx 설치 및 proxy_pass 설정

    Nginx 간단 설명 수문장과 같은 역할로 OS의 방화벽이 1차 보호를 한다면, 그 다음으로 요청을 먼저 받아볼 수 있는 역할을 하는 웹 서버이다. 제일 먼저 요청을 받아 보기 때문에 해당 요청으로 여러가지 설정이 가능한데 proxy_pass의 경우 이 요청을 보고 분석하여 내가 원하는 곳으로 보내주는 것이다. 그리고 보안 설정, 요청 분산 등의 처리도 가능하다 이를 각각 Blacklist IP, Load Balancing이라고 한다. Blacklist IP Blacklist IP의 경우 외부 IP를 블랙리스트로 등록하여 접근을 막는 것으로 예를 들면 중국이나 러시아에서 들어오는 위험한 IP나 해외 IP등의 접근을 막는 것이다. Load Balancing Load Balancing의 경우 요청을 여러 대..

    Entity 모듈 분리(멀티 모듈 프로젝트) - 게시판 만들기(9)

    본격적으로 시작하기에 앞서 도메인 별로 모듈을 분리를 한다면 그에 따라 Entity도 각자 가지고 있을 것이고 만약 이 Entity들이 다른 도메인에서도 사용된다면(연관 관계 등에 의해서) 공통 모듈로 분리하는 것이 좋다고 생각이 되었다. 우선 로그인 기능을 붙이고 싶었다. 로그인, 회원 가입 등이 발생하는 Auth-API와 사용자들 관련 Member-API 두 가지를 만드려 하니 두 곳 모두 Member라는 Entity가 공통으로 사용될 것 같다고 생각이 되었다. 그래서 Entity를 분리하기로 했고 Member와 MemberInfo로 나누어서 관계 설정하여 모듈화 시켜보겠다. Auth-API , Entity 모듈 생성 이전의 멀티 모듈 프로젝트 생성 과정에서 본 것과 같이 auth-api , enti..

    Transactional 몰랐던 부분(신기해서 적어봄) + Transaction과 아닌 부분 나누기

    JPA로 업데이트 시 memberRepository.save(member); 이런 방식으로 save() 메소드를 이용했었다. 이 save() 메소드를 찾아서 까보면 @Transactional @Override public S save(S entity) { Assert.notNull(entity, "Entity must not be null"); if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity); } } 이렇게 생긴 것을 볼 수 있다. 여기서 봐야 할 것은 @Transactional 어노테이션이다. 우리가 save() 메소드를 호출할 때 저 어노테이션의 영향을 받는다..

    @Valid를 이용한 객체 유효성 검증 - 게시판 만들기(8)

    @Valid란? @Valid는 JSR-303 표준 스펙(자바 진영 스펙)으로써 Bean Validator를 이용하여 객체의 제약 조건을 검증하도록 지시하는 어노테이션이다. JSR 표준의 빈 검증 기술의 특징은 객체의 필드에 달린 어노테이션으로 편리하게 검증을 한다는 것이다. Spring에서는 LocalValidatorFactoryBean을 Bean으로 등록하면 LocalValidatorFactoryBean이제약 조건 검증을 처리한다. Spring Boot에서는 아래와 같이 의존성을 추가해주면 해당 기능들을 사용할 수 있다. implementation 'org.springframework.boot:spring-boot-starter-validation' 동작 원리 Spring에서 모든 요청은 Dispatc..