반응형 전체 글517 OSIV(Open Session In View) OSIV(open session in view) 는 영속성 컨텍스트를 뷰까지 열어둔다는 의미입니다. 영속성 컨텍스트가 살아있으면 엔티티는 영속 상태로 유지될 수 있어, 뷰에서도 지연 로딩을 사용할 수 있어요. OSIV의 핵심은 뷰에서도 지연 로딩이 가능하도록 하는 것입니다. 가장 단순한 구현은 클라이언트 요청이 들어올때 필터나 인터셉터에서 트랜잭션을 시작하는 방법인데요. 이를 트랜잭션 방식 OSIV라고 합니다. 하지만, 트랜잭션 방식 OSIV는 표현 계층에서도 엔티티를 수정할 수 있기 때문에 유지보수하기 어려운 코드를 만들 수 있습니다.트랜잭션 방식의 OSIV 문제 해결 방안최신 방식의 OSIV는 트랜잭션 방식의 문제를 해결합니다. 스프링 OSIV는 OSIV를 사용하면서 트랜잭션은 비즈니스 계층에서만 사.. 2025. 10. 14. 헬스체크 헬스체크(Health Check) 는 현재 서버의 상태가 정상인지 파악하는 것을 의미합니다. API 엔드포인트를 호출하거나 특정 포트로 TCP 연결을 시도하는 방식을 사용할 수 있으며, 스프링 액추에이터(Spring Actuator)를 활용하여 헬스체크 기능을 사용할 수 있습니다.필요성서버가 헬스체크 기능을 제공하면 최신 코드를 배포할 때 신규 배포가 정상적으로 이뤄졌는지 확인할 수 있으며, 장애를 감지하여 대응할 수 있다는 이점이 있습니다. 장애 대응의 예시로, 로드 밸런서가 존재하고 트래픽 분산 대상 서버 2대(A, B)가 있을 때, A 서버의 헬스체크 결과가 비정상으로 판단되면 로드 밸런서는 A 서버를 트래픽 분산 대상에서 제외하고, 이후 B 서버로만 요청을 전달할 수 있습니다.비정상 서버는 CPU.. 2025. 10. 13. 레이어드 아키텍처 레이어드 아키텍처(Layered Architecture) 란 소프트웨어를 관심사별로 여러 계층으로 나누어 수직적으로 배열한 것을 의미합니다. 여기서 관심사란 유사한 책임들을 의미합니다. 예를 들어, 데이터베이스 접근과 관련된 책임들을 하나의 관심사로 볼 수 있습니다.레이어드 아키텍처의 대표적인 구성에는 3가지 레이어가 존재하는데요. 표현 계층, 도메인 계층, 데이터 소스 계층이 이에 해당합니다. 레이어의 종류와 수는 프로젝트 상황마다 달라질 수 있습니다.표현 계층(Presentation Layer) 은 사용자 입력을 처리하기 위해 존재합니다.도메인 계층(Domain Layer) 은 비즈니스와 관련된 로직을 수행하기 위해 존재합니다.데이터 소스 계층(Data Source Layer) 은 데이터베이스 접근 .. 2025. 9. 29. 싱글턴 패턴 싱글턴 패턴(Singleton Pattern) 이란 생성자를 여러 차례 호출해도 실제로 생성되는 객체를 하나로 유지하는 것을 의미합니다. 객체가 최초로 생성된 이후에 생성자나 객체 생성 메서드는 기존에 만들어진 객체를 반환합니다.public class Singleton { private static final Singleton INSTANCE = new Singleton(); // 생성자 호출 제한 private Singleton() { ... } public static Singleton getInstance() { return INSTANCE; }}장단점싱글턴 패턴은 하나의 객체를 여러 상황에서 재사용할 수 있기 때문에 메모리 낭비를 방지할 수 있습니다. 또한, 여러 다른 객체가 하나의.. 2025. 9. 26. [BOJ] 9251번: LCS / Java 풀이 백준 9251번: LCShttps://www.acmicpc.net/problem/9251부분 수열(subsequence) 은 원래의 수열에서 일부 원소를 빼서 만든 새로운 수열- 순서는 그대로 유지해야 한다.- 원소들을 건너뛰어도 상관 없다. (비연속성)ex) ABCDE- 가능) ACE, BD, ABCDE, C, ...- 불가능) ECA, BA, ... 부분 문자열(substring) 은 반드시 연속되어야 한다. LCS(Longest Common Subsequence), 최장 공통 부분 수열, 순서는 같지만 연속하지 않아도 되는 공통된 글자들의 가장 긴 묶음주어진 여러 개의 수열(문자열) 모두에 포함되는 부분 수열 중에서 가장 긴 것을 찾는 문제 동적 계획법(Dynamic Programming, DP.. 2025. 9. 26. 코루틴을 사용한 작업 처리가 기존 스레드 방식보다 가벼운 이유 메모리 사용량 차이스레드: 각 스레드는 자체 스택 메모리를 필요로 하며, JVM에서 기본적으로 약 1MB의 스택 크기를 할당합니다. 이 메모리는 스레드가 생성될 때 예약되며 스레드가 종료될 때까지 유지됩니다.코루틴: 코루틴은 스레드 내에서 실행되며 자체 스택을 필요로 하지 않습니다. 일반적으로 코루틴은 단지 몇 KB의 메모리만 사용합니다.컨텍스트 스위칭 비용스레드: 스레드 간 전환은 운영체제 수준의 컨텍스트 스위칭을 필요로 하며, 이는 CPU 레지스터, 메모리 맵 등의 상태를 저장하고 복원하는 비용이 큽니다.코루틴: 코루틴 간 전환은 운영체제의 개입 없이 사용자 공간(user space)에서 발생하며, 단순히 실행 지점과 로컬 변수 상태만 heap 메모리에 저장하면 됩니다.생성 및 관리 비용스레드: 새 .. 2025. 9. 25. 쿠키와 세션의 차이 쿠키와 세션은 HTTP의 무상태(stateless) 특성을 보완하여 사용자 상태를 유지하는 메커니즘이지만, 여러 측면에서 중요한 차이가 있습니다.데이터 저장 위치쿠키는 클라이언트 측 브라우저에 저장되는 반면, 세션은 서버 측에 저장됩니다. 세션은 서버에 데이터를 저장하고 세션 ID만 쿠키를 통해 클라이언트에 전달합니다.보안성쿠키는 클라이언트에 저장되므로 사용자가 직접 접근하거나 수정할 수 있어 보안에 취약합니다. 반면 세션은 중요 정보가 서버에 저장되어 상대적으로 안전합니다.용량 제한쿠키는 일반적으로 브라우저당 도메인별로 4KB 정도로 제한되어 있습니다. 세션은 서버 리소스에 따라 다르지만 쿠키보다 훨씬 많은 데이터를 저장할 수 있습니다.라이프사이클쿠키는 개발자가 설정한 만료 시간까지 유지되며, 만료 시.. 2025. 9. 24. 명령어 파이프라인 명령어 파이프라이닝(instruction pipelining) 은 CPU가 여러 명령어를 동시에 처리하기 위해 각 명령어를 여러 단계로 분할하고, 각 단계를 다른 명령어와 겹쳐서 실행하는 방법입니다. 전통적인 CPU는 한 번에 하나의 명령어를 처리하는 반면, 파이프라인 기법을 사용하는 CPU는 여러 명령어를 각기 다른 단계에서 동시에 처리할 수 있습니다.출처 : 위키 백과파이프라인 위험파이프라이닝은 높은 성능을 가져오지만, 때로는 성능 향상에 실패하기도 하는데요. 이를 파이프라인 위험(pipeline hazard) 이라고 합니다. 파이프라인 위험에는 크게 데이터 위험, 제어 위험, 구조적 위험이 존재합니다.데이터 위험(data hazard) 이란 데이터 의존적인 두 명령어를 동시에 실행하는 경우, 파이프.. 2025. 9. 23. 참조 지역성의 원리 참조 지역성의 원리(Locality of reference) 는 CPU가 메모리에 접근할 때 주된 경향을 바탕으로 만들어진 원리며, 주로 캐시 메모리의 적중률을 높여 CPU의 메모리 접근 횟수를 줄이는 데 이용됩니다. 참조 지역성의 원리는 크게 시간 지역성과 공간 지역성이 존재하는데요.시간 지역성(Temporal locality) 이란 CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다는 것을 의미합니다.공간 지역성(Spatial locality) 이란 CPU는 접근한 메모리 공간 근처에 접근하려는 경향이 있다는 것을 의미합니다. 프로그래밍에서 지역 변수에 값을 저장하면 나중에 다시 지역 변수에 접근할 가능성이 높은 것이 시간 지역성의 예시이며, CPU가 인텔리제이 프로그램을 실행할 때는.. 2025. 9. 22. 이전 1 2 3 4 5 6 ··· 58 다음 728x90 반응형