전체 글

전체 글

    REST 엔드포인트 정의

    SPA 스프링 MVC를 사용해서 전통적인 MPA(Multi-Page Application)로 개발했던 것들을 앵귤러 기반의 SPA로 대체해보자! SPA에서는 프레젠테이션 계층이 백엔드 처리와 거의 독립적이므로, 백엔드 기능은 같으면서 사용자 인터페이스만 다르게 개발할 수 있다. 또한, 이런 API를 사용할 수 있는 다른 애플리케이션과 통합할 수 있는 기회를 제공한다. REST 컨트롤러 @RestController @RequiredArgsConstructor @RequestMapping(path = "/orders", produces = "application/json") @CrossOrigin(origins = "*") // 서로 다른 도메인 간의 요청 허용 public class MemberContro..

    일라스틱 빈스톡에 프로덕션 배포

    프로덕션 환경 누군가 서비스의 프론트엔드 주소를 브라우저에 입력하면 프론트엔드 서버에 연결된 애플리케이션 로드 밸런서를 거쳐 로드 밸런서에 연결된 오토 스케일링 그룹 내의 EC2 인스턴스 중 하나에 트래픽이 전달된다. EC2 인스턴스 내부에서 실행 중인 프론트엔드 애플리케이션이 브라우저에서 동작할 React.js 애플리케이션을 반환하면, 사용자는 프론트엔드 웹의 메인 화면을 보게 된다. 사용자가 아이다와 비밀번호를 입력하고 로그인하면, 백엔드 서버의 애플리케이션 로드 밸런서를 통해 백엔드 애플리케이션에 전달된다. 백엔드 애플리케이션은 MySQL 서버와 통신해 적절한 데이터를 주고 받는다. 서비스 아키텍처 EC2 EC2는 서버 컴퓨터로로, EC2에서 애플리케이션을 실행할 수 있다. EC2에서 애플리케이션을..

    AWS 서버 환경 세팅

    EC2는 AWS에서 제공하는 성능, 용량 등을 유동적으로 사용할 수 있는 서버를 말한다. 인스턴스 생성 인스턴스란 EC2 서비스에 생성된 가상머신을 말하며, 인스턴스를 생성하려면 우선 AMI를 선택해야 한다. AMI란 EC2 인스턴스를 시작하는 데 필요한 정보를 이미지로 만들어 둔 것으로, 인스턴스라는 가상머신에 운영체제 등을 설치할 수 있게 구워 넣은 이미지를 말한다. 예를 들어 아마존 리눅스 2 AMI를 사용한다면 Amazon Linux 2 OS가 인스턴스에 설치되어 사용할 수 있다. 아마존 리눅스 AMI는 아마존이 개발하고 있기 때문에 지원받기가 쉽고, AWS의 각종 서비스와 상성이 좋다. t2는 요금 타입을 이야기하며, micro는 사양을 이야기한다. T 시리즈는 범용 시리즈로, 다른 서비스와 달..

    @Bean과 @Component

    @Bean 개발자가 컨트롤 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶을 때 사용 메서드 레벨에 선언하며, 반환되는 객체를 수동으로 빈으로 등록하는 방법 @Configuration public class SecurityConfig { @Bean public PasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(); } } @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Bean { ... } @Configuration 해당 클래스에 1개 이상의 @Bean을..

    @Valid 유효성 검사

    Form 유효성 검사가 필요한 필드에 검증 어노테이션을 지정한다. @Getter @Setter public class PersonForm { @NotNull @Size(min=2, max=30) private String name; @NotNull @Min(18) private Integer age; } 검증 어노테이션 @NotNull Null 불가 @Null Null만 입력 가능 @NotEmpty Null, 빈 문자열 불가 @NotBlank Null, 빈 문자열, 스페이스만 있는 문자열 불가 @Size(min=, max=) 문자열, 배열등의 크기의 허용 범위 안에 있는지 @Patten(regex=) 정규식을 만족하는지 @Max(), @Min() 지정된 값보다 작은지, 큰지 @Future, @Future..

    세션 저장소 관련 오류

    컨트롤러에서 아래를 통해 세션값을 가져오는 부분을 어노테이션을 이용해 메소드 인자로 세션값을 받을 수 있도록 코드를 바꾸는 과정에서 spring_session 테이블이 없다는 오류 발생 기존 코드 SessionUser user = (SessionUser) httpSession.getAttribute("user"); 바꾼 코드 @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface LoginUser { } @RequiredArgsConstructor @Component public class LoginUserArgumentResolver implements HandlerMethodArgumentResolver ..

    인증된 사용자 식별

    주문을 처리하는 OrderController에 processOrder() 메서드가 주문을 저장하는 일을 수행한다고 가정하자. 이러한 과정에는 인증된 사용자가 누구인지 결정하고, 해당 주문과 사용자 간의 연관관계를 맺는 과정을 포함한다. 그렇다면 사용자가 누구인지 어떻게 결정할까? 사용자가 누구인지 결정하는 방법은 여러가지가 있는데, 그중 가장 많이 사용하는 방법은 아래와 같다. Principal 객체를 컨트롤러 메서드에 주입한다. Authentication 객체를 컨트롤러 메서드에 주입한다. SecurityContextHolder를 사용해서 보안 컨텍스트를 얻는다. @AutheticationPrincipal 어노테이션을 메서드에 지정한다. Principal 객체 코드는 잘 동작하지만, 보안과 관련 없는 ..

    스프링 시큐리티 설정과 로그인 구현

    스프링 시큐리티 자동-구성 build.gradle 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-security' // 스프링 부트 보안 스타터 의존성 implementation 'org.springframework.security:spring-security-test' // 보안 테스트 의존성 스프링 부트 보안 스타터 애플리케이션이 시작되면 스프링이 프로젝트의 classpath에 있는 라이브러리를 찾아 기본적인 보안 구성을 설정해 준다. 이 후, 웹 브라우저에서 홈페이지에 접속하면 스프링 시큐리티에서 제공하는 HTTP 기본 인증 대화상자가 나타난다. Username: user를 입력 Password: 무작위로 자동 생성되어 애플..

    스프링 데이터 JPA

    Spring Data 스프링 데이터 프로젝트는 여러 개의 하위 프로젝트로 구성되는 다소 규모가 큰 프로젝트로, 대부분의 하위 프로젝트는 다양한 데이터베이스 유형을 사용한 데이터 퍼시스턴스에 초점을 둔다. 스프링 데이터에서는 repository 인터페이스를 기반으로 이 인터페이스를 구현하는 repository를 자동 생성해 준다. 스프링 데이터 JPA 관계형 데이터베이스 JPA 퍼시스턴스 스프링 데이터 MongoDB 몽고 문서형 데이터베이스의 퍼시스턴스 스프링 데이터 Neo4 Neo4j 그래프 데이터베이스의 퍼시스턴스 스프링 데이터 레디스 레디스 키-값 스토어의 퍼시스턴스 스프링 데이터 카산드라 카산드라 데이터베이스의 퍼시스턴스 Spring Data JPA 스프링 데이터 JPA는 스프링 프레임워크에서 JP..