멀티스레드 환경에서 발생하는 대표적인 문제 중 하나인 경쟁 상태(Race Condition)에 대해 설명하고, 이를 해결하기 위한 다양한 전략을 설명해보세요. 경쟁 상태(Race Condition)란 무엇인가?둘 이상의 프로세스나 스레드가 공유 자원에 동시에 접근하여 조작할 때, 그 실행 결과가 접근이 발생한 순서에 따라 달라지는 현상단순히 속도가 느려지는 문제가 아니라, 계산 결과가 틀리거나 프로그램이 비정상적으로 동작할 수 있는 논리적 오류 왜 발생하는가?아래와 같은 발생 조건이 존재함 이 중 하나라도 해당하지 않으면 경쟁 상태는 일어나지 않는다.공유 자원의 존재: 여러 스레드가 동시에 접근 가능한 메모리, 변수, 파일 등이 존재해야 함.동시성(Concurrency): 둘 이상의 스레드가 해당 자원..
Spring 기반 웹 애플리케이션에서 발생할 수 있는 4가지 주요 보안 공격 (CSRF, XSS, 세션 고정, JWT 탈취)에 대해 설명하고, 각각에 대한 Spring Security 또는 일반적인 대응 전략을 설명하세요. 1. CSRF (Cross-Site Request Forgery)브라우저가 쿠키를 자동으로 전송한다는 점을 악용해서 사용자가 자신의 의지와 무관하게 공격자가 의도한 행위(수정, 삭제 등)를 특정 웹사이트에 요청하게 만드는 공격 대응 전략- Referer 체크요청이 신뢰할 수 있는 도메인에서 온 것인지 서버 측에서 검증- SameSite 쿠키키 설정에 SameSite=Lax 또는 Strict를 부여하여 타 사이트에서의 쿠키 전송을 제한- CSRF Token서버가 임의의 토큰을 발급하..
세션 기반 인증과 토큰 기반 인증의 차이점과 각각의 보안 고려사항에 대해 설명하세요. 1. 세션 기반 인증 (Session-based Authentication)사용자의 인증 상태를 서버 측에서 관리하는 방식 기본 인증 흐름1. 사용자의 로그인 요청 ->2. 세션 생성 및 컨텍스트 저장 ->3. 세션 ID 응답 ->4. 후속 요청 장점서버가 인증 상태를 관리하므로 보안 제어가 확실함. 사용자를 강제 로그아웃 시키거나, 동시 접속을 제한하는 등의 처리가 쉬움 단점사용자가 증가할수록 서버의 메모리 부하가 커짐.트래픽 분산을 위해 서버를 여러대 두는 환경에서는 세션 정보 불일치 이슈 발생 가능성이 있음 보안 고려사항1. 세션 하이재킹을 막기 위한 HTTPS 통신 암호화 적용.중간에 패킷을 가로채더라도 세션ID..
AWS RDS를 활용하는 주요 이점과 EC2에 직접 데이터베이스를 설치하여 운영하는 것과 비교했을 때의 차별점에 대해 설명해주세요. 그리고 RDS를 사용하는 것이 적합하지 않을 수 있는 상황도 함께 언급해주세요. AWS RDS(Relational Database Service)aws에서 이미 완성된 상태로 사용만 하면 되는 상태로 대여함약간의 비유 : 풀옵션 오피스텔(모든게 배치되어 있지만, 커스텀하기 힘듦) EC2(Elastic Compute Cloud)os만 설치되어 있는 상태로 대여함약간의 비유 : 빈 상가(내가 공사를 해야하지만, 자유도가 높음) RDS를 사용했을 때의 주요 이점1. 관리 자동화- OS, DB 엔진, 보안 패치 설치 등 번거로운 작업들을 간단하게 해결 가능2. 자동 백업 및 복구..
컨테이너 기술과 Docker를 명확히 구분하여 설명하세요. 컨테이너 기술이 Docker 이전에도 존재했던 개념임을 언급하고, Docker가 컨테이너 기술을 구현한 하나의 도구라는 관점에서 설명해주세요. 또한, Docker 외에 컨테이너 기술을 구현한 다른 도구의 예시를 들어보세요 1. 컨테이너 기술이란?쉽게 말하자면 '어디서든 실행되는 독립된 공간'과거에는 개발자가 내 컴퓨터에서 프로그램을 완성해서 서버에 올리면 작동하지 않는 경우가 많았는데, 이는 운영체제나 설치된 프로그램 버전 등 '환경'이 달랐기 때문임이걸 해결하기위해 나온것이 '컨테이너 기술' 코드(프로그램)와 환경(실행에 필요한 모든 파일)을 하나의 상자에 담아 격리하는 기술 이렇게 하면 내 컴퓨터든, 회사 서버든, 클라우드든 어디서든 똑같이 ..
애플리케이션의 각 계층에서 수행되는 입력값 검증의 범위와 책임을 어떻게 나눌 것인지에 대해 설명해주세요. 특히 중복 검증을 피하면서도 안정성을 확보하는 방안과, 이와 관련된 트레이드오프에 대해 설명해주세요. 1. 각 계층별 검증 범위와 책임 분리 컨트롤러 레이어(프레젠테이션 계층)입력값 검증 범위 : 구문적(Syntactic) 검증. 데이터의 형식, 타입, 필수 값 존재 여부더보기구문적(Syntactic) 검증: "형태가 맞는가?"데이터의 '생김새'나 '형식'이 문법적으로 올바른지 확인하는 단계비유: 은행 가입 신청서에 '전화번호' 칸을 채울 때, 숫자 대신 한글(예: '공일공...')을 적었는지 확인하는 것검사 내용:값이 비어있는가? (Null 체크)글자 수가 너무 짧거나 길지는 않은가?이메일 형식(@..
스프링 부트로 프로젝트를 만들고 나면, 서버가 잘 돌아가는지 확인하고 싶어진다.그래서 Actuator를 확인하면 암호같아보이는 Json 텍스트만 가득하고,내가 찾고 싶은 정보를 이 복잡한 정보 더미에서 찾기란 쉽지가 않다 그래서 프로메테우스와 그라파나를 이용해서 시각적으로 보기 편한 대시보드를 만들어보자 지루하고 현학적임. 단계적으로 따라 해보자! (Window 기준) 1. 스프링 부트 설정하기 2. 프로메테우스 다운받기https://prometheus.io/download/ Download | PrometheusDownloads for the latest releases of the Prometheus monitoring system and its major ecosystem component..
JPA에서 발생하는 N+1 문제의 발생 원인과 해결 방안에 대해 설명하세요. N+1 문제란 무엇인가?JPA를 포함한 ORM 기술을 사용할 때 발생하는 대표적인 성능 이슈1번의 쿼리로 N개의 데이터를 조회했는데, 연관된 데이터를 가져오기 위해 N번의 추가 쿼리가 발생하는 현상 예시// 1. 회원 전체 조회 (쿼리 1번 발생)List members = memberRepository.findAll(); for (Member member : members) { // 2. 각 회원의 팀 이름을 출력 (회원이 10명이면 쿼리 10번 발생) System.out.println("회원명: " + member.getName() + ", 팀명: " + member.getTeam().getName());} -- 1..
SQL에서 DDL과 DML의 차이점을 설명하고, 각각의 대표적인 명령어들의 용도를 설명하세요. DDL (Data Definition Language)데이터베이스의 뼈대(구조)를 결정하는 명령어 대표적인 명령어들과 용도CREATE 생성 : 새로운 테이블이나 데이터베이스를 만듦ALTER 수정 : 기존에 만든 테이블의 구조를 바꿈 (컬럼 추가, 타입 변경 등)DROP 삭제 : 테이블이나 데이터베이스를 삭제TRUNCATE 초기화 : 테이블의 구조는 남겨두고 테이블 내의 데이터만 삭제--CREATECREATE TABLE products ( id SERIAL PRIMARY KEY, name VARCHAR(100), price NUMERIC);--A..
웹 API의 발전 과정에서 SOAP에서 REST로의 전환이 일어난 이유와 그 장단점에 대해 설명하세요. SOAP란?SOAP(Simple Object Access Protocol)은 서로 다른 시스템 간의 정형화된 메시지 통신을 위해 만들어진 프로토콜 SOAP의 주요 특징2000년대 초반 웹 서비스를 지배XML 기반 메시지 포맷엄격한 규격(표준) 존재WSDL(Web Services Description Language)로 API 명세 제공HTTP 외에도 SMTP, TCP 등 다양한 전송 프로토콜 사용 가능 SOAP의 한계SOAP은 엔터프라이즈 환경에서는 강력했지만, 웹이 대중화되면서 여러 한계가 드러났다 XML 기반 → 메시지 크기 큼- 파싱 비용 증가- 개발 생산성 저하 WSDL 작성 필수- 설정과 코드..
