분류 전체보기 22

'우연히 웨스 앤더슨 2' 사진전

이경준 사진전 이후 전시회를 하나도 가질 못했다.그러던 중 같은 장소에서 다른 사진전을 하기에 방문해보았다. 인터파크 예매 링크 (2024.10.18 ~2025.04.13)https://tickets.interpark.com/goods/24013174 인터파크 티켓 tickets.interpark.com 인터파크 새해 특가 예매 링크 (2025.01.15 ~2025.02.10) - 40% 할인https://tickets.interpark.com/goods/25000523 인터파크 티켓 tickets.interpark.com 서울역 4번 출구로 나오면 쉽게 찾아 갈 수 있다.  입구 사진.저 넓은 눈 밭에 저렇게 서있는 모습이 웅장하게 다가오는건 기분탓이었을까. '우연히 웨스 앤더슨2'에서는 모험을 강조한..

일상 2025.01.15

Nginx 알아보기

Nginx? - 트래픽이 많은 웹 사이트 서버가 받는 부하에 도움을 주는 오픈소스 웹 서버 소프트웨어. 비동기 이벤트 기반구조가 특징.- 고성능, 확장성, 고가용성 웹서버, 역방향 프록시 서버 및 웹 가속기(HTTP 로드밸런서, 콘텐츠 캐시 등의 기능 결합) (공식문서) 클라이언트는 브라우저를 뜻하며, 유저라고도 볼 수 있다.웹 서버는 정적 파일에 대한 응답을 담당한다.WAS는 동적인 처리를 담당하며 처리 후에 응답을 한다. Nginx 구조Nginx는 한 개 또는 고정된 스레드/프로세스에서 여러 클라이언트 요청을 비동기 방식으로 동시에 처리한다.새로운 요청이 들어와도 새로운 프로세스 및 스레드를 생성하지 않기 때문에, 프로세스/스레드 생성 비용이 존재하지 않고, 적은 자원으로도 효율적인 운용이 가능하다...

간단이론정리 2024.08.06

[JPA] N+1에 대하여

1번의 쿼리를 날렸는데 조회된 데이터 갯수(N) 만큼 쿼리를 추가 실행하는 것. 일대다 혹은 다대일 관계를 조회 할 때 발생 할 수 있다. 하위 엔티티들을 첫 쿼리 실행시 한번에 가져오지 않고, Lazy Loading으로 필요한 곳에서 사용되어 쿼리가 실행될때 발생하는 문제. 해결방법1. Fetch JoinN+1 자체가 발생하는 이유는 한쪽 테이블만 조회하고 연결된 다른 테이블은 따로 조회하기 때문이다.미리 두 테이블을 JOIN 하여 한 번에 모든 데이터를 가져올 수 있다면 애초에 N+1 문제가 발생하지 않을 것이다. 단점쿼리 한번에 모든 데이터를 가져오기 때문에 JPA가 제공하는 Paging API 사용 불가능(Pageable 사용 불가)1:N 관계가 두 개 이상인 경우 사용 불가패치 조인 대상에게 별..

Checked Exception & Unchecked Exception

에러(Error) : 프로그램이 정상적으로 실행되지 못하는 상황 (하드웨어적인 메모리와 관련된 문제)오류(Exception) : 개발자의 실수로 인해서 발생하였지만 처리가능한 오류(처리할 경우 정상화할 수 있는 문제)Checked Exception : RuntimeException의 하위 클래스가 아니면서 Exception 클래스의 하위 클래스들이다. 예외 처리를 강제한다.Unchecked Exception : RuntimeException의 하위 클래스들을 의미합니다. 이것은 체크 예외와는 달리 에러 처리를 강제하지 않는다.Checked ExceptionRuntimeException의 하위 클래스가 아니면서 Exception 클래스의 하위 클래스이며 컴파일러가 체크하는 예외를 뜻함.(try & catc..

[OOP] 객체 지향 4대 특징 및 객체 지향 5대 원칙(SOLID)

객체 지향 4대 특징캡슐화(Encapsultation)상속(Inheritance)추상화(Abstraction)다형성(Polymorphism)1. 캡슐화(Encapsultation)- 연관된 데이터(변수)와 기능(메소드)을 하나로 묶고, 불필요한 요소를 외부에 노출되지 않도록 설계하는 방식을 뜻한다. 자바에서는 접근 제어자(public, private, default, protected)를 통해 캡슐화를 구현할 수 있다. 데이터 보호 : 외부로부터 클래스에 정의된 속성과 기능 보호데이터 은닉 : 내부의 동작을 감추고 외부에 필요한 부분만 노출 2. 상속(Inheritance) - 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미한다. 상속을 이용하면 기존에 정의되어 있는 클래..

간단이론정리 2024.06.20

[OOP] 디자인 패턴(Design Pattern) 정리

디자인 패턴은 프로그램을 개발하는 과정에서 빈번하게 발생하는 문제를 정리해서 상황에 따라 간편하게 적용할 수 있게 정리한 것이다. 디자인 패턴은 객체 지향 4대 특성(캡슐화, 상속, 추상화, 다형성)과 5대 원칙(SOLID) 을 기반으로 구현되어 있다. 2024.06.20 - [간단이론정리] - [OOP] 객체 지향 4대 특징 및 객체 지향 5대 원칙(SOLID)디자인 패턴의 요소패턴 이름 (Name): 각 패턴은 특정한 문제 해결 방법을 설명하는 고유한 이름을 가진다. 이 이름은 커뮤니케이션을 쉽게 하고, 개념을 명확히 한다.문제 (Problem): 패턴이 해결하려는 특정 상황 또는 문제를 설명한다.해결책 (Solution): 문제를 해결하기 위한 설계나 전략을 제시한다. 이는 구체적인 코드가 아닌 추..

간단이론정리 2024.06.20

[JPA] 영속성 컨텍스트 (Persistence Context)

영속성 컨텍스트(Persistence Context)Entity를 영구 저장하는 환경. 눈에 보이지 않기 때문에 어플리케이션과 DB 사이 객체를 보관하는 가상 DB로 생각해도 무방 하다. EntityManager를 통해 접근.엔티티 생명 주기 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태영속(managed) : 영속성 컨텍스트에 관리되는 상태준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태삭제(remove) : 삭제된 상태 비영속(new)Member member = new Member(); // 엔티티(객체) 생성객체 생성엔티티가 영속성 컨텍스트에 없는 상태 (= 영속성 컨텍스트와 관계 x) 영속(managed)em.persist(member)..

[DB] 트랜잭션 ACID (Transaction ACID)

트랜잭션 ACID란?ACID(원자성, 일관성, 고립성, 지속성)는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다. (위키백과) 각각의 성질에 대해 알아보고자 한다.A 원자성 (Atomicity)하나의 트랜잭션은 완전하게 수행되거나 아예 수행되지 말아야 하는 특성데이터를 저장 할 때 오류가 발생하면 특정 부분까지만 저장하는 것이 아니라 아예 저장하지 않게 하는 것이다.그렇지 않으면 데이터를 관리하는데 있어서 어려움이 발생한다. C 일관성 (Consistency)트랜잭션 작업이 시작되기 전에 데이터베이스 상태가 일관된 상태였다면 트랜잭션 작업이 종료된 후에도 일관성 있는 데이터 베이스 상태를 유지해아한다.DB에 정의된 규칙을 트랜잭션이 위반했다면 롤백 되어야 한다. ..

가비지 컬렉션 (GC, Garbage Collection) (1)

가비지 컬렉션 (GC, Garbage Collection)이란?자바의 메모리 관리 방식, JVM의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체(garbage)를 모아 주기적으로 제거하는 프로세스를 말한다.가비지 컬렉터가 메모리 관리를 대행해 주기 때문에 Java 프로세스가 한정된 메모리를 효율적으로 사용할 수 있게 하고, 개발자 입장에서 메모리 관리, 메모리 누수(Memory Leak) 문제에서 대해 관리하지 않아도 되어 개발에만 집중할 수 있다는 장점이 있다. 가비지 컬렉션이 대상을 선정하는 방법가비지 컬렉션은 특정 객체가 garbage인지 아닌지 판단하기 위해서 도달성, 도달능력(Reachability) 이라는 개념을 적용한다.객체에 대해 레퍼런스가 있다면 Reachabl..

about Java 17

Java 17은 21년 9월에 공개된 세번째 LTS 버전으로 29년 9월까지 지원된다. 23년 기준 Java 17 채택률은 약 45% (출처 : jetbrains) ※ Spring Boot 3.0 버전 부터는 JDK 17 이상만을 지원한다. ※ Spring Boot 3.0 이상 사용을 위해 JDK 17이 필요하고, 또한 JDK 17은 지원 기간이 길기 때문에 채택률은 더 올라갈 것으로 생각된다.※ 그러나 서비스에서 사용하는 서드파티 호환성을 따져봐야한다.Java 17에 추가된 내용봉인 클래스(Sealed Classes)의사 난수 생성 API 확장1. 봉인 클래스(Sealed Calsses)상속을 통해 코드를 재사용할 수 있지만 무분별한 상속은 오히려 설계와 가독성에 있어서 안좋은 영향을 끼친다.봉인 클래..