IT/Java 19

[Java] volatile 키워드

Java 에서 사용하는 volatile 키워드에 대해 정리하고자 한다. 1. volatile 이란?- 코어가 변수의 값을 읽어올 때 캐시가 아닌 메모리에서 읽어오도록 변수 앞에 붙이는 키워드 2. 사용 목적- 가시성을 보장한다.(여기서 가시성이란, 공유 데이터를 사용한 다음 동기화 블록을 빠져나가고 나면 다른 스레드가 변경된 최신 값을 즉시 사용할 수 있게 해야 함을 의미한다.)- 변수 접근에 대한 동기화가 큰 오버헤드를 발생시키는 상황에서 대안이 될 수 있다. 3. 한계- 원자적 연산(읽기와 쓰기 작업이 단일 연산)에서만 사용 가능하다.- 스레드를 차단하지 않기 때문에 복잡한 상태 관리에는 적합하지 않다. 4. synchronized 키워드와의 비교- synchronized 키워드는 더 강력한 동기화 ..

IT/Java 2024.12.09

[Java] JVM의 Garbage Collector

JVM 및 Garbage Collector 개념에 대한 정리를 하고자 한다. 1. JVM (Java Virtual Machine) 이란? - 운영체제의 메모리 영역에 접근하여 메모리를 관리하는 프로그램 2. Garbage Collector 란? - 동적으로 할당된 메모리 영역 중 사용하지 않는 영역을 탐지하여 해제하는 기능 - 이를 온전히 이해하기 위해, 메모리의 구조 중 Stack 영역과 Heap 영역에 대해 알아야 한다. - Stack 영역 - 정적으로 할당된 메모리 영역 - 원시 타입의 데이터가 값과 함께 할당 - Heap 영역에 생성된 Object 타입의 데이터의 참조 값 할당 - Heap 영역 - 동적으로 할당된 메모리 영역 - 모든 Object 타입의 데이터가 할당 - Heap 영역의 Obje..

IT/Java 2023.05.21

[JUnit] TDD를 편하게 하기 위한 JUnit 사용법

NEXTSTEP 에서 박재성 님의 "자바 플레이그라운드 with TDD, 클린코드" 강의를 듣고 TDD 를 시작해보려고 하는 중 유용하다고 생각되는 항목들에 대해 차근차근 정리해 나가려고 한다. 1. @ParameterizedTest - 목적: 중복 코드를 제거하기 위해 사용 - 사용법 private Set numbers; @BeforeEach // Test 전 Data Setting void setUp() { numbers = new HashSet(); numbers.add(1); numbers.add(1); numbers.add(2); numbers.add(3); } @ParameterizedTest // 중복 제거 @ValueSource(ints = {1, 2, 3}) // 테스트 대상 void c..

IT/Java 2023.03.25

[Quartz] Quartz 스케줄러 적용의 건

다음은 Quartz 스케줄러 적용 관련한 글이다. 1. 배경 스케줄링 방식을 "스프링의 @Scheduled 어노테이션 사용" 에서 "Quartz 라이브러리 사용" 으로의 변경에 대한 검토를 하기 위해 진행하였다. 2. 개발 환경 개발 환경은 다음과 같다. Spring Framework 4.1.2 quartz-2.2.3 library 3. 전체 구조 context-quartz.xml : schedulerFactoryBean 생성 후 jobDetail 선언 SchedulerInit.java : 새로운 schedule 생성 quartzMainJob.java : schedule 실행 로직 호출 JobDetailFactoryBean.java : context-quartz.xml 에서 jobDetail 만들 때 사..

IT/Java 2023.01.13

2021-03-13 일지1

* 스프링 시큐리티 (Spring Security) - 스프링 기반의 어플리케이션의 보안(인증과 권한)을 담당하는 프레임워크 - 만약 스프링 시큐리티를 사용하지 않았다면, 자체적으로 세션을 체크하고 리다이렉트 등을 해야함 - 필터(Filter) 기반으로 동작하기 때문에 스프링 MVC와 분리되어 관리 및 동작 * 보안 용어 정리 - 접근 주체(Principal): 보호된 대상에 접근하는 유저 - 인증(Authentication): 증명 과정 (ex. 유저 아이디와 비밀번호를 이용하여 로그인하는 과정) - 인가(Authorization): '권한부여'나 '허가' (어떤 대상이 특정 목적을 실현하도록 허용(Access)하는 것) - 권한: 인증된 주체가 애플리케이션의 동작을 수행할 수 있도록 허락되었는지를 결..

IT/Java 2021.03.13

2021-03-11 일지1

* 스웨거(Swagger) - Web API 문서화를 위한 도구 * 스웨거 허브 사이트를 이용하면 Web API를 만들지 않더라도 Web API를 명세화 + 간단한 테스트 가능 * Swagger2를 사용하려면 Docket 객체를 Bean으로 설정해야 함 Docket 객체에는 어떤 경로의 Web API들을 자동으로 문서화 할 것인지에 대한 설정과 문서 설명에 대한 내용이 포함 * 웹에서의 상태 유지 기술 - HTTP 프로토콜은 상태 유지가 되지 않는 프로토콜 > 이전에 무엇을 했고, 지금 무엇을 했는지에 대한 정보를 갖고 있지 않음 > 웹브라우저(클라이언트)의 요청에 대한 응답을 하고 나면 해당 클라이언트와의 연결을 지속하지 않음 - 상태 유지를 위해 Cookie와 Session 기술이 등장함 * 쿠키(C..

IT/Java 2021.03.11

2021-03-10 일지3

* Web API - REST API 아키텍처 스타일을 완벽하게 구현하지 못할 경우 이를 Web API라고 부름 * 관련 내용 - DispatcherServlet은 컨트롤러 메소드를 실행하고 해당 메소드가 리턴한 객체를 변환시키려고 함 - 변환을 시킬 때 메시지 컨버터(MessageConverter)를 사용하게 되는데 메시지 컨버터가 Bean으로 등록되어 있지 않으면 오류 발생 - 보통 Web API는 JSON, XML과 같은 데이터를 표현하기에 알맞은 형태로 결과를 출력함 * @RestController - Spring 4에서 Rest API 또는 Web API를 개발하기 위해 등장한 어노테이션 - 이전 버전의 @Controller와 @ResponseBody를 포함 * MessageConverter -..

IT/Java 2021.03.10

2021-03-10 일지2

* REST 구성 > 자원(Resource): 자원은 Data, Meta Data, HATEOAS로 나뉨 > 행위(Verb): HTTP Method로 표현 > 표현(Representations) * REST 특징 1) Uniform Interface (유니폼 인터페이스) - 구성 요소(클라이언트, 서버 등) 사이의 인터페이스는 균일(uniform)해야 함 인터페이스를 일반화함으로써, 전체 시스템 아키텍처가 단순해지고, 상호 작용의 가시성이 개선되며, 구현과 서비스가 분리되므로 독립적인 진화가 가능해짐 2) Stateless (무상태성) - 클라이언트와 서버의 통신에는 상태가 없어야 함 모든 요청은 필요한 모든 정보를 담고 있어야 함 요청 하나만 봐도 바로 뭔지 알 수 있으므로 가시성이 개선되고, task..

IT/Java 2021.03.10

2021-03-10 일지1

* 서비스(Service) 객체 - 비지니스 로직(Business Logic)을 수행하는 메소드를 가지고 있는 객체 - 보동 하나의 비지니스 로직은 하나의 트랜잭션으로 동작 * 트랜잭션(Transaction) - 하나의 논리적인 작업 - 트랜잭션의 4가지 특징 > 원자성(Atomicity) : 전체가 성공하거나 전체가 실패하는 것 > 일관성(Consistency) > 독립성(Isolation) > 지속성(Durability) : 트랜잭션이 성공적으로 완료되었을 경우, 결과는 영구적으로 반영되어야 함 * JDBC 프로그래밍에서 트랜잭션 처리 방법 - DB에 연결된 후 Connection 객체의 setAutoCommit 메소드에 false를 파라미터로 지정 - 입력, 수정, 삭제 SQL이 실행을 한 후 모두..

IT/Java 2021.03.10

2021-03-09 일지2

* MVC (Model-View-Controller) - Model: 뷰가 렌더링하는데 필요한 데이터 (ex. 사용자가 요청한 상품 목록이나, 주문 내역) - View: 웹 애플리케이션에서 실제로 보이는 부분이며, 모델을 사용해 렌더링함 (ex. JSP, JSF, PDF, XML 등으로 결과 표현) - Controller: 사용자의 액션에 응답하는 컴포넌트 모델을 업데이트하고, 다른 액션을 수행함 * DispatcherServlet - 프론트 컨트롤러 (Front Controller) - 클라이언트의 모든 요청을 받은 후 이를 처리할 핸들러에게 넘기고 핸들러가 처리한 결과를 받아 사용자에게 응답 결과를 보여줌 - 여러 컴포넌트를 이용해 작업을 처리함 * 요청 선처리 작업시 사용된 컴포넌트 - org.sp..

IT/Java 2021.03.09