Project
TIL(40) 21-11-17 : @Transactional / 스프링 Controller가 Client로 부터 파라미터를 받는 방법 / Lambda와 Stream
Facts ✅ 메모장 사이트 CRUD 기능 구현 Findings ✏️ @Transactional 스프링에서 트랜잭션 처리를 하려면, 트랜잭션이 필요한 클래스 혹은 메서드에 @Transactional 어노테이션을 달아주면 된다. @Transactional이 붙은 메서드는 메서드가 포함하고 있는 작업 중에 하나라도 실패할 경우 전체 작업을 취소한다. 클래스, 메서드 모두에 @Transactional 어노테이션을 붙이면 메서드 레벨의 @Transactional 선언이 우선 적용된다. // update @Transactional public Til updateTil(Long id, TilRequestDto tilRequestDto) { Til til = tilRepository.findById(id).orEls..
TIL(39) 21-11-15 : 도커를 사용해서 컨테이너를 구성해보기
🧭 도커 컨테이너 구성 및 활용 1. 도커, 컨테이너에 대한 이해 2. MariaDB를 컨테이너로 구성 및 Python Flask 연동 3. docker compose를 통해 여러개의 컨테이너를 효과적으로 관리 1️⃣ 도커, 컨테이너에 대한 이해 ✏️ Container (1) Definition ✔️ Container : 하나의 컴퓨팅에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 코드와 모든 dependencies를 패키징하는 소프트웨어 표준 단위이다. EX) 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정을 패키징한다. Container vs VM 컨테이너 기술을 이해하려면, VM과 비교해보면 쉽다. 컨테이너 = 각각의 프로세스들을 격리시키는 기술 (가상머신 달리 격리된 프로세스들을 ..
TIL(38) 21-11-10 : Spring Security + OAuth2
💫 Facts ✅ Spring CRUD API, Auth API(인증 및 인가)의 데이터 흐름 파악 ✅ 토큰 이해 💫 Findings 🧩 Token 토큰 기반 인증 : 인증받은 사용자들에게 토큰을 발급하고, 서버에 요청을 할 때 헤더에 토큰을 함께 보내 유효성을 검사하는 방식 👉🏻 세션과 달리 토큰 기반 인증방식은 다양한 도메인에 대응할 수 있고, 서버의 메모리 부담을 줄일 수 있다. 또한, 서버가 여러 대를 두고 사이트를 운영할 때, 세션 유지가 제대로 안될 수 있지만, 토큰 인가 방식으로는 서버에서 토큰을 발급하고 보내주고 이를 서버에 저장하지 않기에 서버가 여러 대여도 상관없다. 🤯 하지만, 치명적인 단점이 있다. 이미 발급된 토큰에 대해서는 돌이킬 수 없다. 세션/쿠키의 경우 만일 쿠키가 악의적으..
TIL(37) 21-11-09 : Object Oriented Programming
💫 Facts ✅ 객체지향에 대해 나만의 언어로 정립하기 ✅ 쿠키와 세션 이해 ✅ 스프링 시큐리티를 통해 로그인, 회원가입 기능 구현 💫 Findings 🧩 객체지향 (1) 클래스, 인스턴스, 메소드 ✏️ 클래스 : 표현하고자 하는 대상의 공통 속성을 한 군데에 정의해 놓은 것이다. 즉, 객체의 속성을 정의해 놓은 것을 말한다. ✏️ 인스턴스 : 어떠한 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다. ✏️ 메소드 : 어떤 작업을 수행하는 코드를 하나로 묶어 놓은 것을 말한다. (2) 생성자 ✏️ 생성자 : 인스턴스가 생성될 때 사용되는 '인스턴스 초기화 메소드'다. 생성자를 이용해서 인스턴스가 생성될 때 수행할 동작을 코드로 짤 수 있다. 대표적으로 인스턴스 변수를 초기화 하는 용도로 사용한..
TIL(36) 21-11-08 : Spring DI / IoC
Facts ✅ 스프링의 중요한 내부 기능인 DI, loC에 대해 이해 ✅ 스프링 프레임워크에 대해 이해 Findings 🧩 DI, loC DI DI란 클래스 사이에 존재하는 의존관계를 주입해주는 것을 말한다. Spring에서 관리하는 객체를 Bean이라고 부르는데, 이를 Spring Framework가 직접 생성해서 필요한 곳에 주입해준다. 🤔 의존관계? 어떤 클래스가 다른 클래스에 접근할 수 있는 경로를 가지거나 다른 클래스의 객체의 메소드를 호출하는 경우 두 클래스 사이에 의존관계가 있다고 말합니다. IoC IoC는 프로그램의 제어의 흐름을 관리하는 주체가 개발자에서 프레임워크로 역전되는 것을 말한다. Spring에서는 Spring Container에서 객체를 생성하고 관리한다. 🤔 DI / IoC가..
TIL(35) 21-11-05 : Spring은 고마운 친구
Facts ✅ All In One Servlet의 문제점, All In One Controller의 문제점 파악을 통해, Spring Framework의 편리함 이해 Findings MVC 패턴 MVC 패턴은 애플리케이션을 Model, View, Controller 이 3가지 역할로 구분한 개발 방법론이다. Model은 데이터와 행동을 갖는 객체로서, 비즈니스 로직을 수행한다. View는 데이터의 시각화로, 모델이 처리한 데이터를 받아서 사용한다. Controller는 사용자의 요청을 해석하여 처리하고 결과를 반환한다. Model과 View의 사이를 연결해주며, 데이터의 흐름을 제어한다. 🤔 MVC 패턴을 사용하는 이유는 무엇일까? MVC 패턴을 사용하지 않는 경우에는 로직 코드와 출력 코드가 한 페이지..
TIL(34) 21-11-04 : JPA를 이용하여 CRUD 기능 구현
Facts ✅ JPA를 이용하여 데이터베이스 CRUD 기능을 구현 ✅ 클라이언트 화면 추가 Findings ✏️ Lombok Lombok : 자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메소드/생성자 등을 자동생성해줌으로써 코드를 절약할 수 있도록 도와주는 라이브러리 @Getter : object의 Getter 메소드를 자동으로 생성 @NoArgsConstructor : parameter가 없는 기본 생성자를 자동으로 생성 @RequiredArgsConstructor : final이나 @NoNull인 필드값만 paramter로 받는 생성자를 자동으로 생성 ✏️ DTO 데이터(ex. 객체)를 주고 받을 때, Entity를 사용하는 것이 아니라, 새로운 클래스를 사용하기 위해, DTO가 나왔다. 🤔 W..
TIL(33) 21-11-03 : Spring 시작
Facts ✅ TDP Service를 Sam famework를 사용하여 Serverless로 배포 ✅ Spring 프레임워크의 기본 레이어(Repository, Service, Controller) 이해 ✅ JPA 이해 Findings ✏️ 기본 레이어 스프링에서 서버를 개발할 때, 처리 과정을 3개로 분리해서 개발한다. 분리하는 이유는, 코드가 변경이 되어도 서로 영향을 주지 않게 하여, 확장성을 높이기 위함이다. 역할별로 Controller, Service, Repository로 분리한다. (1) Controller 클라이언트의 요청을 받음 요청에 대한 처리는 서비스에게 전담 클라이언트에게 응답 (2) Service 서버에서 사용자의 요구사항 처리하는 핵심 기능 DB 정보가 필요할 때는 Reposit..
TIL(32) 21-11-02 : Authentication 수정 완료
Facts ✅ "TDP 프로젝트" Authentication 수정하기 (Token 저장 위치를 Cookie에서 Local Storage로 저장) ✅ Authorization : Token을 Storage에 저장하는 이유 포스팅 Findings 우리는 Token을 Local Storage에 저장하기로 했다. Why? 로그인 유지 기능을 위해서다. 🤔 Local Storage는 만료기한 없이 데이터를 저장하는데 괜찮은가 의문이 들 수 있다. 💡 Token에 유효기간을 넣고, 일정시간이 지나면, 인가하지 못함으로 Local Storage에 저장해도 상관없다고 결론을 내렸다. 그리고 만료된 토큰의 경우, 해당 토큰을 삭제 처리를 해주면 된다고 생각이 들었다. 하지만, Token이라는 친구는 탈취당하면, 해당 T..
TIL(31) 21-11-01 : SAM 프레임워크로 서버리스 배포하기
Facts ✅ AWS 에서 제공하는 SAM 프레임워크에 대해서 이해하기 ✅ SAM 프레임워크를 이용해 서버리스 배포하기 ✅ 서버사이드 렌더링 제거하기 Findings ✏️ SAM을 이용한 Lambda 관리하기 SAM : 서버리스 애플리케이션을 구축할 때 사용할 수 있는 오픈 소스 프레임워크 👉🏻 간단한 YAML 템플릿을 사용하여 애플리케이션(Lambda 함수, API 엔드포인트, DynamoDB 테이블 및 기타 리소스)을 설명하는 데 사용할 수 있는 단축 구문을 제공한다. Lambda를 좀 더 효율적으로 관리할 수 있게 해준다. Lambda를 통해 서버리스 백엔드를 구축할 때, 설정할 것들이 너무 많았다. 하지만, SAM을 통해서는, 코드를 배포함으로, 인프라를 쉽게 구성할 수 있게 되었다. 이것을 Ia..