pwoogi
자신의 왜곡된 경험을 진실이라고 생각하지 말자

전체 글 27

첫 미니프로젝트 종료

첫 프론트와의 협업이 끝나고 많은 것을 깨닫게 되었다. 부족한 자료구조, 메서드 사용방식부터 AWS EC2를 활용한 Http -> Https 동적 웹 ALB 기술 기초지식까지 아직 모르고 있는게 너무나 많다. L7 Load Balancer로 프로토콜 헤더로 서버 분산을 가능케 해주는 AWS의 Load Balancer에 대해서도 알아보았고 Spring security에 대한 복습 + JWT의 관련 사용법을 다시 한 번 복습하게 되었다. 아래와 같은 기초 지식들 복습해보는 시간을 가져야겠다. AuditorAware JPA와 AuditorAware를 사용하면 다음과 같이 간단한 매핑을 통해 특정 필드에 지금 로그인한 사람의 정보로 등록자를 자동으로 입력 해줄 수 있다. @Configuration @Enable..

Spring Security

Spring Security Spring Security는 Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. Spring Security는 '인증'과 '권한'에 대한 부분을 Filter 흐름에 따라 처리하고 있다. Filter는 Dispatcher Servlet으로 가기 전에 적용되므로 가장 먼저 URL 요청을 받지만, Interceptor는 Dispatcher와 Controller사이에 위치한다는 점에서 적용 시기의 차이가 있다. Spring Security는 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안관련 로직을 작성하지 않아도 된다는 장점이 있다. SecurityContextHolder -> Securi..

카테고리 없음 2022.08.10

Spring Boot Validation

Validation의 필요성? 일반적인 애플리케이션에서 데이터 유효성 검사 로직은 다음과 같은 문제를 가지고 있다. 애플리케이션 전체에 분산되어 있다. 코드 중복이 심하다. 비즈니스 로직에 섞여있어 검사 로직 추척이 어렵고 애플리케이션이 복잡해진다. 이러한 문제 때문에 데이터 유효성 검사 로직에 기능을 추가, 수정하기 어렵고, 오류가 발생할 가능성도 크다. Bean Validation Bean Validation은 위에서 말한 문제들을 해결하기 위해 다양한 제약(Contraint)을 도메인 모델(Domain Model)에 어노테이션(Annotation)로 정의할 수 있게한다. 이 제약을 유효성 검사가 필요한 객체에 직접 정의하는 방법으로 기존 유효성 검사 로직의 문제를 해결한다. Validation 올바..

ORM, Hibernate, JPA

ORM이란? 객체 지향 언어를 이용하여 서로 호환되지 않는 타입 간의 데이터를 변환하는 기술 DB 테이블 데이터를 (자바) 객체와 매핑하는 기술 RDBS -> 객체 지향 DB로 가상화 목적 DB의 추상화 : SQL 구현을 없애고 DB 변경에 유연해지는 것 객체의 이점을 활용 : 객체간 참조 (type - safety) 관심사 분리 : 비즈니스 로직에 좀 더 집중하게 하는 것 Jakarta(JAVA) Persistence API RDBMS를 다루기 위한 인터페이스 표준 명세 1. 기본적으로 관계형 DB의 영속성만을 규정 2. API + JPQL + metadata(+ Criteria API) Persistence(영속성) 프로세스가 만든 시스템의 상태가 종료된 후에도 사라지지 않는 특성 구현 방법 : 시스..

AOP & Logging (slf4j)

AOP란? AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 예로들어 핵심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 된다. 또한 부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등을 예로 들 수 있다. AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. 이때, 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 ..

[SPRING BOOT]JWT, Thymeleaf, form (2/2)

Thymleaf Thymeleaf는 웹뿐만 아니라 다른 환경을 위한 최신의 서버-사이드 자바 Template Engine이며, HTML, CSS, XM, JS 및 Text까지 수용(이는 다른 템플릿 엔진과 동일)한다. 타임리프의 주 목표는 유지관리가 쉬운 템플릿 생성 방법을 제공하는 것이며, 실제로 템플릿에 영향을 주지 않는(HTML의 구조를 깨지 않는, 기존 HTML 코드를 변경하지 않고 덧붙이는 코드) 방식을 사용한다. 즉, Natural Templates 개념을 기반으로 한다. 이를 통해 디자인 팀과 개발 팀간 갈등, 격차 해소가 기대된다. 짧게 요약하면, 클라이언트가 동적으로 그리는 방식이 아니라 서버가 html 그려서 내려주는 방식 서버에서(유저마다 달라질 수 있는 동적) 데이터들을 구해서 미리..

[인터넷] 프로토콜, 메커니즘

표준과 프로토콜 인터넷은 거대한 네트워크도 거대한 컴퓨터도 아니고 느슨하고 체계가 없으며 혼란스럽고 임시적인 네트워크 모음 네트워크와 그 위에 있는 컴퓨터가 서로 통신하는 방법을 규정하는 표준으로 묶여있다. 네트워크의 연결 네트워크와 컴퓨터를 식별하기 위해서 이름과 주소가 필요 데이터를 어떤 형식으로 구성할지, 누가 먼저 어떻게 응답할지, 처리할지에 대한 합의가 필요 프로토콜 컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계. 기기 간 통신은 교환되는 데이터의 형식에 대해 상호 합의를 요구하는데 이런 형식을 정의하는 규칙의 집합을 프로토콜 정보를 형식화하는 방법 컴퓨터간에 정보를 교환하는 방법 컴퓨터를 식별하고 인가하는 방법 무언가 실패했을 때 해야할 일 등에 대한 표준 종..

[SPRING BOOT]JWT, Thymleaf, form (1/2)

드디어..JWT 구현 성공.. 하 JWT 사용하는이유 1. Session마다 다른 Client 정보를 가지고 있을 수 있기 때문에 세션 저장소가 필요함(JWT는 secret key) 2. 로그인 정보를 Server에 저장하지 않고 Client에 로그인 정보를 JWT로 암호화하여 저장을 통해 인증/인가 3. 서버에 저장하지 않기 때문에 stateless 토큰값을 준다 Session과 차이가 있다면? 세션방식의 JESSIONID는 Key로만 활용 (의미없는 값) 토큰은 유저를 설명할 수 있는 데이터를 포함 JWT 단점 1. 한 번 제공된 토큰은 회수가 어려움 세션은 서버에서 세션을 삭제하면 브라우저의 JESSIONID는 무용지물, 그러나 토큰은 한번 제공된 토큰을 회수할 수 없다. (단, Refresh To..

애플리케이션 & 소프트웨어의 계층구조

여러 작업을 수행하는 애플리케이션 애플리케이션 정의 운영체제를 플랫폼으로 삼아 작업을 수행하는 온갖 종류의 프로그램이나 소프트웨어 시스템을 총칭하는 용어 애플리케이션 특징 작을수도 있고 거대할 수도 있으며 하나의 특정과제에 집중하거나 폭넓은 여러가지 기능을 처리 또한 판매하거나 무료로 배포될 수도 있다. 코드의 소유권이 강하게 보호 또는 자유롭게 사용가능한 오픈소스, 아무레한 제한이 없는 경우도 있음 애플리케이션의 예시 1. date (유닉스 프로그램) 유닉스 시스템 - 디렉터리 내의 파일과 폴더를 나열하는 ls 프로그램(텍스트 전용 프로그램) 2. 워드 파일을 열고 내용을 읽고 저장할 수 있음 알고리즘 존재 텍스트가 바뀜에 따라 디스플레이를 계속 갱신 정보를 화면에 표현, 글자크기, 글꼴, 색상, 레이..

[DI, IoC, Bean] 개념 박살내기

3주차 개념정리 정말..알아야할게 끝도 없다 DI(Dependency Injection) 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다. 강한결합 강한 결합은 어떠한 객체가 다른 객체에 강한 의존성을 가지고 있음을 뜻한다. 자바를 배울 때 상속과 포함관계, 그리고 인터페이스에 대해서 공부를 했었는데 그 개념과 굉장히 유사한 것 같다 Controller1이 Service1의 객체를 생성하고 생성자를 통해 강한결합이 되어있다. 즉 “의존 대상 B가 변하면, 그것이 A에 영향을 미친다”고 한다. 즉, B의 기능이 추가되거나 변경되면 그 영향이 A에 미치는 것이다 class BurgerChef { private ..