본문 바로가기

전체 글86

관계대명사의 구조와 활용 관계대명사는 두 문장을 연결하여 앞의 명사(선행사)를 구체적으로 수식하는 형용사절을 만든다. 문장의 정보를 논리적으로 결합하고 중복을 제거하여 훨씬 세련된 문장을 구성하게 해주는 필수 문법이다.1. 관계대명사의 기본 원리두 문장에서 공통된 대상을 찾아 하나로 합치는 과정은 다음과 같다.문장 A: I know the developer.문장 B: He built this platform.결합: I know the developer [who built this platform].여기서 'the developer'는 선행사가 되고, 'who'는 접속사+대명사 역할을 하며 형용사처럼 선행사를 수식한다.2. 관계대명사의 종류와 격 (Case)선행사가 사람이냐 사물이냐, 그리고 관계대명사가 절 안에서 어떤 역할을 하.. 2026. 3. 12.
영어 문장 구조의 이해와 확장 (1형식~5형식) 영어 문장을 잘 만드는 능력은 단순히 단어를 많이 아는 것과 다르다. 많은 학습자가 단어와 기본 문법을 알면서도 실제 문장을 만들 때 어려움을 겪는 이유는 '문장을 구조로 생각하는 습관'이 부족하기 때문이다.영어 문장은 보통 다음과 같은 원리로 확장된다.문장의 핵심 구조 → 추가 정보 → 문장 확장예를 들어, 기본 문장에 정보를 추가하면 문장은 자연스럽게 풍부해진다.The company improved the system. (기본 구조)The company significantly improved the system. (부사 추가)The company significantly improved the system last year. (시간 추가)The company significantly improved.. 2026. 3. 12.
실무에서 마주한 LDAP 실무에서 마주한 LDAP웹 개발을 공부하면서 로그인 기능을 개발할 때는 블로그나 강의를 참고하며 세션 방식, JWT 방식, 소셜 로그인(OAuth2) 등을 중심으로 공부하고 적용해왔다. 그동안은 이 세 가지 방식이면 대부분의 서비스에 대응할 수 있다고 생각했다. 그러나 실제 실무에서는 전혀 다른 방식의 인증 흐름을 경험하게 되었다. 내가 경험한 기존 로그인 방식들1. 세션 기반 로그인가장 익숙했던 방식은 서버 세션을 이용한 인증 처리다.다음과 같은 흐름이었다:사용자가 로그인 폼에서 ID/PW 입력서버에서 해당 사용자를 DB에서 조회저장된 해시된 비밀번호(BCrypt)와 비교인증 성공 시, HttpSession 생성클라이언트는 JSESSIONID를 쿠키로 받아, 이후 요청에 포함서버는 인증된 사용자의 .. 2025. 8. 18.
Swap Memory 1. Swap Memory1.1 기본 개념Swap Memory는 리눅스 커널이 주기억장치(RAM) 부족 상황에서 보조기억장치(HDD/SSD)의 일부를 메모리처럼 사용하는 기능이다. 메모리는 휘발성이며 속도가 빠른 반면, Swap은 비휘발성 저장장치를 사용하므로 느리지만 시스템의 안정성과 연속성을 유지하는 데 중요한 역할을 한다.1.2 Swap이 필요한 이유RAM이 부족한 상황에서도 시스템을 계속 동작시킬 수 있다.사용하지 않는 메모리 페이지를 Swap 공간으로 밀어내어 메모리 여유를 확보할 수 있다.고정 메모리 사용량이 있는 애플리케이션 또는 컨테이너에 대해 메모리 압축 버퍼 역할을 수행한다.OOM(Out Of Memory) 상황을 예방할 수 있다.2. Swap의 작동 방식2.1 페이지 교체 알고리즘리눅.. 2025. 5. 25.
Dictionary Dictionary는 말 그대로 데이터베이스에 존재하는 모든 객체에 대한 정보, 즉 메타데이터(Metadata)를 저장하는 영역이다.오라클 데이터베이스는 테이블, 인덱스, 뷰, 사용자, 권한 등과 관련된 다양한 정보를 내부 시스템 테이블에 보관하고 있으며,이 정보를 외부에서 조회할 수 있도록 딕셔너리 뷰(View) 형태로 제공한다. 오라클에서는 대표적으로 아래와 같은 딕셔너리 뷰들을 제공한다딕셔너리 뷰설명USER_ 뷰현재 사용자가 소유한 객체 정보ALL_ 뷰현재 사용자가 접근 가능한 객체 정보DBA_ 뷰데이터베이스 전체 객체 정보 (DBA 권한 필요)V$ 뷰동적 퍼포먼스 뷰, 실시간 상태 정보 제공GV$ 뷰RAC 환경에서 여러 인스턴스 정보를 함께 제공 예를 들어, 현재 사용자가 소유한 테이블 목록을 확.. 2025. 5. 19.
Optimizer SQL을 아무리 잘 짠다고 해도, 실행 속도가 느리다면 사용자는 불편함을 느끼고 시스템 자원은 낭비된다. 그렇다면 이 SQL이 실제로 어떻게 실행될지는 누가 결정할까? 바로 오라클의 옵티마이저(Optimizer)이다.옵티마이저는 오라클 데이터베이스에서 SQL 문을 분석하고 최적의 실행 계획을 선택하는 핵심 엔진이다. 데이터베이스 성능은 이 옵티마이저가 어떤 실행 계획을 선택하는가에 따라 크게 달라질 수 있다. 이 글에서는 오라클 옵티마이저의 구조와 동작 방식, 종류, 튜닝 방법까지 깊이 있게 살펴본다.1. 옵티마이저란 무엇인가?옵티마이저는 SQL 문장을 실행할 때 사용할 수 있는 여러 가지 실행 계획(Execution Plan) 중에서 가장 비용이 적은 계획을 선택하는 역할을 한다. 여기서 비용(Cost.. 2025. 5. 19.
Feign Client 예외 처리 문제 문제 상황FeignClient 호출 시, 잘못된 입력값(예: 예약 시 잘못된 쿠폰 적용)으로 인해 예외가 발생할 수 있습니다.각 서비스는 자체적인 에러 코드와 메시지를 가지고 있어, 예약 서비스에서 일관되게 예외를 처리하기 어려웠습니다.또한 서비스 전반에서 반복적인 catch 블록이 존재하며, 이는 코드 중복을 발생합니다.해결 방안Feign 클라이언트 관련 예외를 처리할 중앙화된 유틸리티(FeignExceptionUtils)를 생성합니다.예외를 예약 서비스에서 정의한 상태 코드로 래핑 하고, 발생한 에러 메시지(실패 응답에 대한 내용)를 보여줍니다.또한 feignClient 호출 시 예외가 발생할 경우 exception에 따른 catch를 여러 번 반복하며 사용하지 않기 위해 FeignExceptionU.. 2025. 1. 22.
S.A - 대규모 AI 시스템 설계 프로젝트 주제: 물류 관리 및 배송 시스템을 위한 MSA 기반 플랫폼 개발팀원: 조우석, 한미수, 조창현, 신진우 프로젝트 기간: 12/5 ~ 12/17S.A 작성 내용: ERD, 테이블 명세서, API 명세서, 아키텍처 설계도ERD  테이블 명세서    API 명세서노션의 파일 용량이 커서 pdf의 데이터가 이상한 부분이 있습니다.파일로 추출하기 위해 배율을 작게 했더니 json 형식 등의 문제가 있습니다.따라서 api 명세서 링크를 첨부합니다https://www.notion.so/teamsparta/API-57d139b62887422283c4030f11d26af2  아키텍처 2024. 12. 9.
Spring의 동적 쿼리 : JPQL , QueryDSL 1. JPQLJPQL(Java Persistence Query Language)을 사용하면 @Query 주석을 사용하여 Repository에서 직접 쿼리를 정의할 수 있다. 또한 선택적으로 동적 매개변수를 위해 @Param과 결합할 수 있다. 예시) '제품' 엔티티가 있고 '이름' 및 '카테고리'를 기준으로 제품을 필터링한다고 가정@Repositorypublic interface ProductRepository extends JpaRepository { @Query("SELECT p FROM Product p WHERE (:name IS NULL OR p.name = :name) AND (:category IS NULL OR p.category = :category)") List findPro.. 2024. 11. 20.