분류 전체보기

    [AWS] amazon EC2 생성을 위해 알아야 할 개념들

    저번 포스팅에서는 클라우드 컴퓨팅과 AWS에 대해서 간단하게 정리해보았습니다. 2022.07.31 - [CS/네트워크] - [AWS] 클라우드 컴퓨팅과 AWS 이번 포스팅에서는 AWS EC2를 만들기 위해서 알아야 할 개념들을 정리해보겠습니다. AWS EC2 설정 애플리케이션 및 OS 이미지 Amazon Machine Image(AMI) aws ec2에는 인스턴스를 시작하는 데 필요한 소프트웨어 구성(운영체제, 어플리케이션서버, 어플리케이션)들을 선택할 수 있는 AMI가 존재합니다. 인스턴스를 시작할 때 AMI를 지정해야 합니다. 인스턴스 유형 aws ec2에서는 원하는 컴퓨팅, 메모리, 네트워킹 또는 스토리지 요건에 맞는 여러 인스턴스 유형을 선택할 수 있습니다. 현재 제가 서비스에 사용하고있는 t4g..

    [AWS] 클라우드 컴퓨팅과 AWS

    웹 어플리케이션 서비스를 실제로 배포해보면서 AWS의 클라우드 컴퓨팅 기술을 이용하게 되었습니다. 배포할때 왜 클라우드를 이용하게 되었는지, 또 클라우드 컴퓨팅 기술로 AWS의 EC2를 이용하면서 공부한 개념들을 정리하려고 합니다. 클라우드 컴퓨팅 클라우드 컴퓨팅이 뭘까요? 간단하게 말하면 “인터넷을 통해 연결된 원격 컴퓨터를 활용하는 기술”입니다. 그렇다면, 왜 개인 PC가 있지만 원격으로 연결된 컴퓨터를 활용하는 기술이 필요할까요? 클라우드 컴퓨팅이 없다면 불편한 상황들이 발생합니다. 제 웹 어플리케이션을 제 컴퓨터에 올려놓고 제 컴퓨터에 어디서든 접근할 수 있도록 public IP를 열어놔야 합니다. 또한, 클라이언트가 언제든지 접속할 수 있도록 항상 제 컴퓨터는 켜져있어야 합니다. 하지만 클라우드..

    로깅 도입

    log4j2 도입 터놓고 서비스를 개발하면서 배포환경에서는 콘솔에 로그를 남길 수 없었습니다. 콘솔에 로그를 남기면 휘발되기도 하고 나중에 확인하기 어려웠습니다. 그래서 log파일로 남기기로 결정했습니다. logging 프레임워크 선택 사용할만한 로깅 프레임워크 구현체는 log4j, logback, log4j2 였습니다. 헷갈릴만한 용어정리 sl4j(Simple Logging Facade For Java) 로깅 프레임워크가 아니라 logger의 인터페이스이다. slf4j를 이용하면 코드를 일정하게 유지하면서 구현체의 전환을 통해 다른 로깅 프레임워크로의 전환을 쉽고 간단하게 할 수 있습니다. log4j 가장 오래된 로깅 프레임워크입니다. 2015년 기준으로 개발이 중단되었습니다. logback log4j..

    클라이언트에서 Location header를 찾지 못할 때

    CORS 응답 설정시에 서버측에서 자주하는 실수가 있습니다. 아래 코드로 CORS 응답을 설정해줄 수 있습니다. 하지만 한가지 문제가 발생합니다. @Configuration public class WebConfig implements WebMvcConfigurer { public static final String ALLOWED_METHOD_NAMES = "GET,HEAD,POST,PUT,DELETE,TRACE,OPTIONS,PATCH"; @Override public void addCorsMappings(final CorsRegistry registry) { registry.addMapping("/api/**") .allowedMethods(ALLOWED_METHOD_NAMES.split(",")));..

    [Spring MVC] Dispatcher Servlet, 핸들러 매핑, 핸들러 어댑터

    Spring MVC 구조를 학습하게 되었습니다. 스프링 MVC는 아래와 같은 흐름으로 진행됩니다. 처음엔 그림만 보면 이해하기 어렵다고 느낄텐데요. 차근차근 따라가면 흐름은 그렇게 어렵지 않습니다. Dispatcher Servlet 클라이언트로부터 HTTP 요청이 오면 먼저 Dispatcher Servlet에 도달하게 됩니다. (흐름 편의상 filter는 생략) 스프링 공식문서에서 Dispatcher Servlet은 아래와 같이 설명합니다. Spring MVC, as many other web frameworks, is designed around the front controller pattern where a central Servlet, the DispatcherServlet, provides a ..

    우아한테크코스에서 찾은 나만의 공부법

    우아한테크코스(이하 우테코)에 오기 전의 학습은 항상 인터넷 강의를 듣는 것으로 시작했다. 스스로 알아야 할 키워드를 찾지 못했고 누군가 알려주기를 바랐다. 듣고 있는 것이 편했다. 지금까지 항상 주입식으로 교육을 받아온 것이 익숙했기 때문이다. 우테코에 들어온 현재의 학습방법은 많이 달라졌다. 크루들과 여러 미션들을 겪으며 정립해간 학습 방법들을 소개한다. 미션 중심의 학습 키워드 레벨1 중반쯤 깨달았던 방법중 하나는 미션 중심으로 학습할 키워드를 찾는 것이었다. 무작정 교재를 따라 사서 처음부터 읽는 방식은 나랑 맞지 않았다. 우리에겐 우아한테크코스 커리큘럼이라는 프레임워크가 존재한다. 코치분들이 현재 단계에서 필수적으로 알아야 할 키워드를 미션을 통해 알 수 있도록 오랜 고민을 통해 만든 커리큘럼일..

    [Spring] CORS 관련 405에러 해결방법

    실제 EC2에 서버를 배포하고 프론트의 브라우저에서 요청했을때 CORS 헤더응답을 받지 못하여 405 에러가 발생합니다. 그런데, 프론트의 브라우저에서만 이 에러가 발생합니다. 포스트맨으로 요청했을 때는 모든 메서드가 정상적으로 작동합니다. 이번 포스팅은 배포시에 왜 이런문제가 발생하고 어떻게 해결해야할 지 알아봅니다. OPTIONS 메서드 요청 OPTIONS 메서드 OPTIONS 요청은 브라우저가 서버에게 지원하는 옵션들을 미리 요청하고 허가된 요청에 한해서 전송하기 위한 보안상의 목적이 있다. 네트워크 요청 시 실제 원하는 요청(GET, PUT, POST, DELETE) 전에 OPTIONS 요청을 보내는 경우가 존재합니다. 브라우저는 OPTIONS를 preflight하여 서버에서 허용하는 옵션을 미리..

    [Kotlin] 내부 프로퍼티의 Setter만 막는 2가지 방법

    외부에서 변경(setter)을 막기 위한 변수가 필요할 때가 있습니다. 그리고 코틀린에서는 생성자에서 val로 변수를 선언하면 자동으로 getter만 지원합니다. 하지만 생성자에 노출되지 않고 내부에서만 사용하는 프로퍼티에서 setter만 막고 getter만 지원하고 싶다면 어떻게 해야할까요? 이번 포스팅은 내부에서만 사용하는 프로퍼티에서 setter만 막고 getter만 지원하기 위한 2가지 방법을 소개하고 이 둘의 차이점을 설명합니다. private set data class Game(val words: Words, val date: LocalDate) { var count: Int = 0 private set ... count는 생성자로 직접 주입해주지 않고 내부에서만 사용되는 변수이지만, gett..

    [Spring] Bean 등록의 이점

    스프링 Bean의 이점 저번 시간에는 스프링의 탄생 목적에 대해 알아보았습니다. 2022.04.28 - [Web/Spring] - [Spring] 스프링의 탄생목적 - SOLID, DI 컨테이너 저번시간의 내용을 짧게 정리해보겠습니다. 스프링은 좋은 객체지향 프로그래밍을 위해서 탄생했고, 좋은 객체지향 프로그래밍을 위해서는 의존성을 주입해주는 IoC 컨테이너가 필요했습니다. 스프링은 IoC컨테이너를 자동으로 생성해줌으로써 객체지향 프로그래밍을 도와줍니다. 하지만 단지 의존성 주입을 자동으로 해주는 것만으로 스프링을 사용하는 것은 아닌데요. 이번 시간에는 객체를 스프링 Bean으로 등록하면 어떤 이점이 있는지 알아보도록 하겠습니다. 의존성 주입 스프링이 어떻게 의존성 주입을 해줄까요? 스프링은 설정 정보가..

    Spring Bean Validation 적용하기

    기존의 미션들에서 검증기능을 구현하려면 하나하나 다 짜주어야 했습니다. 이제 스프링 부트 프로젝트에서는 @Validated 를 이용해 쉽게 유효성 검증을 수행할 수 있습니다. 이번 시간에는 간단하게 Bean Validation을 내 프로젝트에 적용시켜봅니다. Bean Validation 스프링의 Bean Validation은 클래스 필드에 annotation을 적용하여 해당 필드에게 제약조건을 정의하는 구조입니다. public class LineRequest { @NotBlank(message = "이름을 입력해주세요.") private String name; 앞으로 위의 코드처럼 필드에선 @NotBlank 어노테이션 만으로도 검증이 가능합니다. 적용 방법 순서는 간략하게 아래와 같습니다. 의존성 추가 ..