1. 자바의 Thread 활용 방식자바 언어는 1995년 탄생 시점부터 멀티스레딩을 언어의 핵심 기능으로 내재화하며 엔터프라이즈 서버 애플리케이션 개발의 표준으로 자리 잡았다. 초기 자바(JDK 1.0)는 사용자 수준의 '그린 스레드(Green Threads)' 모델을 채택하여 운영체제(OS)와 독립적으로 스레드를 스케줄링했으나, 당시의 하드웨어 환경과 다중 코어 프로세서의 활용 한계로 인해 JDK 1.2부터는 '플랫폼 쓰레드(Platform Thread)' 모델로 전환하였다. 이 모델은 자바의 java.lang.Thread 객체를 운영체제의 커널 스레드와 1:1로 매핑하는 방식이다.이 1:1 매핑 모델은 운영체제의 강력하고 성숙한 스케줄러를 활용할 수 있고, 네이티브 코드와의 상호 운용성이 뛰어나다는 ..
Backend/Spring
스프링은 기본적으로 IoC와 DI를 위한 컨테이너로서 동작하지만 그렇다고 "스프링은 단지 IoC/DI 프레임워크다" 라고는 말할 수 없다. 스프링은 단순히 IoC/DI를 편하게 적용하도록 돕는 단계를 넘어서 엔터프라이즈 애플리케이션 개발의 전 영역에 걸쳐 다양한 종류의 기술에 관여한다. 그렇다면 스프링이란 무엇이고, 만들어진 이유와 존재 목적, 추구하는 가치는 무엇일까?8.1. 스프링의 정의자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크정의를 봐도 스프링이 무엇인지 감이 바로 오지는 않을 것이다. 하지만 이 정의에는 스프링의 중요한 특징이 잘 담겨있다.애플리케이션 프레임워크일반적으로 라이브러리나 프레임워크는 특정 업무 분야나 한 가지 기술에 특화된 목표를 가지고 만들어진다...
대부분의 엔터프라이즈 애플리케이션은 어떤 방법으로든 백엔드 시스템, 특히 데이터베이스와 연결돼서 동작한다. 애플리케이션이 다루는 데이터를 장기적으로 보존하고 효과적으로 검색할 수 있게 해주는 데이터베이스의 이용은 필수이다. 자바에는 JDBC라는 호환성이 뛰어나고 편리한 API를 가진 데이터 액세스 기술이 있다. 하지만 전통적인 SQL과 JDBC API조합만으로는 엔터프라이즈 애플리케이션의 복잡하고 거대한 데이터를 처리하는 깔끔한 코드를 만드는 데는 많은 제약과 문제가 있다. 자바에는 JDBC이외에도 다양한 데이터 엑세스 기술이 존재한다. 이러한 옵션들을 알아보겠다.1. 공통 개념1.1. DAO 패턴데이터 액세스 계층은 DAO 패턴이라 불리는 방식으로 분리하는 것이 원칙이다. 비즈니스 로직이 없거나 단순하..
토비의 스프링 Vol1의 6장 내용입니다.0. 개요AOP(Aspect Oriented Programming)는 IoC/DI, 서비스 추상화와 더블어 스프링의 3대 기반기술 중 하나이다. 스프링의 기술 중에서 가장 이해하기 힘든 난해한 용어를 가진 기술로 악명이 높다.1. 트랜잭션 코드의 분리public void upgradeLevels() throws Exception { TransactionStatus status = this.transactionManager .getTransaction(new DefaultTransactionDefinition()); // 트랜잭션 경계 try { // 비즈니스 로직 시작 List users = userDao.getAll(..
프레임워크의 기본 동작원리는 제어의 역전(IoC, Inversion Of Control) 이다. 프레임워크는 개발자가 만든 클래스에 대한 제어 권한을 넘겨받아서 주도적으로 애플리케이션의 흐름을 제어한다.1. JUnitJUnit프레임워크는 다음 두가지 조건을 요구한다메소드가 Pulbic으로 선언되어야 한다.메소드에 @Test라는 어노테이션을 붙여줘야 한다.if/else 문장은 JUnit의 assertThat 스태틱 메서드로 바꿀 수 있다.asertThat() 메서드는 첫 번째 파라미터의 값을 뒤에 나오는 매처라고 불리는 조건으로 비교해서 일치하면 다음으로 넘어가고, 아니면 테스트가 실패하도록 만들어준다. is()는 메처의 일종으로 equals() 로 비교해주는 기능을 가진다.if(!user.getName(..
토비의 스프링 Vol 1 스프링의 이해와 원리 및 https://mangkyu.tistory.com/204 을 참고하였습니다예외란?예외는 프로그램의 정상적인 실행 흐름을 방해하는 이벤트로, 런타임(실행 시간) 중에 발생합니다. 프로그램이 처리할 수 없거나 예상하지 못한 상황에 직면했을 때 생성됩니다.예외의 종류와 특징자바 개발자들 사이에서 가장 큰 이슈는 체크 예외(checked exception) 라고 불리는 명시적 처리가 필요한 예외를 사용하고 다루는 방법이다. 자바에서 throw를 통해 발생시킬 수 있는 예외는 크게 세 가지가 있다.1. java.lang.Error시스템 자체의 비 정상적인 상황이 발생하는 경우이다. 이는 주로 Java Virtual Machine에서 발생하고, 애플리케이션 레벨에서..
내 첫 프로젝트 경험에서 겪었던 소셜 로그인 문제를 언젠가는 해결해야지... 해결해야지... 생각만 하다가 이번 기회에 제대로 파고들었다.여기까지 찾아왔다면, 위 시퀀스 다이어그램에 조금이나마 친숙할 것 같다. 만일 처음 본다면, 관련 내용을 찾아보는 것이 도움이 될 것 같다. 단적으로 말해서, spring security는 위의 과정을 위임받아 해결한다. 게다가 위 과정을 통해 가져온 사용자 정보를 바탕으로 JWT토큰을 발행한다. 우리가 Spring Security와 OAuth2.0을 활용한 JWT 토큰 방식(쿠키로 전달) 보안 체계이다. 아래 시퀀스 다이어그램을 보자.이를 구현하기 위해 GPT와 함께 어떤 클래스들을 구현해야 하는지 알아보며 공부해봤고, 아래와 같은 다이어그램을 완성하였다.번호순서대로..
(코드관련 이후 추가 예정)단순히 Jwt토큰을 발행해서 사용하려고 했었다. 무려 모든 API를 처리하는 Controller에서 수동으로 JWT토큰을 Parsing하며...하지만 전지전능한 지피티님께서 다음 한마디를 툭 던졌다.GPT : "필터는 단순 유효성 검사 + 사용자 정보 파싱 + 인증 객체 등록까지 책임져요.Controller는 검증 끝난 요청만 받아서 처리합니다."어라? 필터라는 개념이 앞단에서 검증을 끝낸다는 말인가? 그럼 검증 따로 서비스 처리 따로인가?라는 의문에서 시작해서, 스프링 시큐리티를 간략히 공부해보기로 하였다.스프링 시큐리티라고 함은 스프링 기반의 인증과 인가를 처리해주는 보안 프레임워크이다. 상세히 알아보자.대략적으로 아래와 같이 이해하면 될 것같다.Spring Security..