본문 바로가기

Java & Spring10

자바 정리 (4) 이 글은 자바의 정석 3판을 정리한 내용입니다. 자바의 정석 3판 ✔ 스레드(Thread) 1. 프로세스와 스레드(Process & Thread) 프로세스 : 실행 중인 프로그램, 자원(resources)[메모리, cpu, ...]과 스레드로 구성 스레드 : 프로세스 내에서 실제 작업을 수행. 모든 프로세스는 최소한 하나의 스레드를 가지고 있다 2. 멀티 스레드 장단점 장점 시스템 자원을 보다 효율적으로 사용할 수 있다 사용자에 대한 응답성이 향상 작업이 분리되어 코드가 간결 단점 동기화(synchronization)에 주의 교착상태(dead-lock)가 발생하지 않도록 주의 각 스레드가 효율적으로 고르게 실행될 수 있게 해야 한다 프로그래밍할 때 고려해야 할 사항들이 많다 3. 스레드의 구현과 실행 T.. 2024. 2. 28.
자바 정리 (3) 이 글은 자바의 정석 3판을 정리한 내용입니다.자바의 정석 3판 ✔ 예외처리(Exception Handling)1. 프로그램 오류컴파일 에러(Compile-Time Error) : 컴파일할 때 발생하는 에러런타임 에러(Runtime Error) : 실행할 때 발생하는 에러논리적 에러(Logical Error) : 작성 의도와 다르게 동작Java의 런타임 에러에러(error)는 어쩔 수 없지만, 예외(exception)는 처리하자.에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류예외 처리의 정의와 목적(Exception Handling)정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 .. 2024. 2. 19.
자바 정리 (2) 이 글은 자바의 정석 3판을 정리한 내용입니다. 자바의 정석 3판 ✔ 객체지향 프로그래밍 OOP(Object Oriented Programming) 객체 : 모든 인스턴스를 대표하는 일반적인 용어 인스턴스 : 특정 클래스로부터 생성된 객체(new 키워드) ex) 클래스(TV설계도), 객체(TV제품) ✔ 클래스의 정의 클래스 : 데이터와 함수의 결합 서로 관련 있는 속성(데이터)과 기능(메서드)을 묶어 놓은 것 1. 선언 위치에 따른 변수의 종류 class Variables { // → 클래스 영역 시작 int iv; // 인스턴스 변수 static int cv; // 클래스 변수(static 변수) void method() { // → 메서드 영역 시작 int lv = 0; // 로컬 변수(지역 변수) .. 2024. 2. 6.
자바 정리 (1) 이 글은 자바의 정석 3판을 정리한 내용입니다.자바의 정석 3판 ✔ 자바 언어의 특징자동 메모리 관리(GC, Garbage Collection)멀티 스레드 지원다수의 라이브러리 지원운영체제에 독립적(자바 가상 머신, JVM)✔ 변수(Variable)단 하나의 값을 저장할 수 있는 메모리상의 공간 1. 변수의 초기화변수를 사용하기 전에 반드시 초기화(Initialization) 해야 한다.메모리는 여러 프로그램이 공유하는 자원이기 때문에 전에 다른 프로그램에 의해 저장된 쓰레기 값(Gargabe value)이 남아있을 수 있다.로컬(지역) 변수(Local Variable)는 읽기 전에 꼭 초기화해야 한다.(안 하면 컴파일 에러) 2. 변수의 명명 규칙변수뿐 만 아니라 자바 프로그래머들에게 권장하는 규칙들이.. 2024. 1. 22.
Java 버전 관리 도구 ✔ 여러 개발 언어의 버전 관리 도구 Node.js의 nvm, Python의 pyenv 등 다른 언어에서는 필요한 버전을 손쉽게 변경하면서 사용할 수 있는 툴이 있습니다. 명령어를 사용해서 버전 목록을 확인하고, 그 버전의 이름을 설치해서 설치한 버전을 사용하기만 하면 됩니다. 그동안 Java의 경우 Oracle의 사이트에서 jdk를 다운로드하거나, OpenJDK를 다운로드하여서 환경 변수에 등록해서 사용했었습니다. Java 8을 사용하다가 Java 17을 사용해야 하는 일이 생겼는데 다운로드해서 환경 변수 작업을 하는 게 귀찮아서 Node.js의 nvm을 떠올리고 Java 버전 관리 도구를 찾아보니 바로 나왔습니다. "SDKMAN"과 "JENV"가 있는 걸 확인했고, 이 중에 저는 "SDKMAN"을 사.. 2023. 11. 18.
[Spring] 인터셉터(Interceptor) 적용 ✔ Interceptor Intercept은 (중간에) 가로막다[가로채다] 라는 의미이고, 의미와 같이 사용자가 서버로 어떠한 요청을 보낸다. 서버에서는 DispatcherServlet이 HandlerMapping을 통해 컨트롤러를 찾아 실행하기 전에, 인터셉터가 등록되어 있다면 순차적으로 인터셉터를 거쳐서 컨트롤러가 실행이 된다. 등록된 인터셉터가 없다면 바로 컨트롤러가 실행된다. 인터셉터의 정식 명칭은 HandlerInterceptor이고, HandlerInterceptor에는 3개의 메서드가 있다. ✔ Interceptor 구현 인터셉터를 구현하기 위해서는 HandlerInterceptor 인터페이스의 3개 메서드를 오버라이딩해서 사용할 수 있고, 인터셉터를 따로 등록해 줘야 한다. @Compone.. 2022. 4. 17.
JPA @MappedSuperclass @MappedSuperclass 엔티티를 구현하다 보면 보통 공통적으로 사용하는 속성들이 존재한다. 가장 많이 나오는 게 등록일, 수정일, 등록자, 수정자 등이 이에 해당한다. 이렇듯 공통 매핑 정보를 부모 클래스에서 상속받아 사용할 때 쓰인다. 부모 클래스는 테이블과 매핑하지 않고 자식 클래스에게 매핑 정보만 제공하는 것이다.(자식 클래스에서는 상속한 필드들도 칼럼으로 인식한다) @MappedSuperclass를 선언한 클래스는 엔티티가 아니다. 그리고 직접 생성해서 사용할 일이 없으므로 추상 클래스(abstract)로 만드는 것을 권장한다. 2022. 3. 7.
JWT Token(JSON Web Token) JSON 웹 토큰 JSON 웹 토큰(JSON Web Token, JWT)은 클레임(사용자 정보)을 안전하게 표현하기 위한 인터넷 표준(RFC 7519)이다. JWT 구조 헤 더 { "alg" : "HS256", "typ" : "JWT" } 서명 생성을 위해 어떤 알고리즘을 사용할지 식별한다. 토큰의 타입을 지정한다. 페 이 로 드 { "loggedInAs" : "admin", "iat" : 1422779638 } iss (Issuer)- 발급자 sub (Subject)- 주제 aud (Audience)- 대상 exp (Expiration Time)- 만료 시간 nbf (Not Before)- 활성 날짜 iat (Issued Time)- 발급 시간 jti (JWT ID)- 고유 식별자 다음 예는 표준 Is.. 2022. 3. 7.
JUnit @Before & @After @Before 애노테이션을 지금까지 테스트 실행 전 실행이 된다는 것 정도만 알고 있었는데, 박재성 님의 책을 통해 좋은 내용을 알게 되었다. JUnit을 사용할 때 인스턴스 생성을 위해 @Before 애노테이션을 활용한다. @Before 애노테이션을 사용하지 않고 필드(field)로 구현하는 방법도 단위 테스트는 성공한다. 각 단위 테스트를 실행할 때마다 인스턴스를 생성하는 것은 똑같기 때문이다. 위와 같이 작성해도 테스트는 성공한다. 하지만, JUnit은 초기화 작업을 위와 같이 구현하는 것을 추천하지 않는다. 인스턴스를 매 테스트마다 생성하는 이유는 테스트 메서드를 실행할 때 인스턴스의 상태 값이 변경되어 다음 테스트 메서드를 실행할 때 영향을 미칠 수 있기 때문이다. 이와 같이 테스트 실행 순서나.. 2022. 3. 7.
Spring Boot 자동 환경 설정 Spring Boot 자동 환경 설정 이해하기 Spring Boot 자동 설정은 Web, H2, JDBC 등 100여 개의 자동 설정을 제공한다. 새로 추가되는 라이브러리(JAR)는 Spring Boot 자동 설정 의존성에 따라서 설정이 자동 적용된다. 자동 설정은 @EnableAutoConfiguration 혹은 @SpringBootApplication 중 하나를 사용하면 된다. @EnableAutoConfiguration 사용 시 @Configuration와 같이 사용해야 한다. SpringBoot Version은 2.4.4 버전이다. @SpringBootApplication spring-boot-autoconfigure-2.4.4.jar/org/springframework/boot/autoconfi.. 2021. 4. 10.