IT

    스프링 DB와 트랜잭션 관리 feat. JDBC

    JDBC를 사용해서 DB를 연결하고 스프링에서 @Transactional 까지 사용하는 과정을 요약했다. 다양한 DB 연결에서 오는 문제Oracle을 사용하던 A회사는 고민에 빠졌다. 5년간 Oracle을 사용했는데 너무 많은 비용이 들어서 일부 시스템을 postgresql로 전환하려고 한다. 하지만 DB마다 규격이 있고 연결방법이 다르다. postgresql로 연결하려면 어마어마한 교체비용이 든다. 이를 어떻게 해결할까? JDBC의 등장JDBC는 자바에서 DB에 접속할 수 있도록 하는 자바 API다. 어떤 DB와 관계없이 JDBC 사용법은 동일하기에 변경하더라도 APP 코드는 바꾸지 않아도 된다.JDBC 인터페이스- Connection- Statement- ResultSet A사는 JDBC덕에 성공적..

    웹 개발에서 쓰레드는 왜 안보일까?

    스프링부트로 웹 개발을 여러 번 해봤지만, 직접 쓰레드를 선언하거나 다뤘던 경험이 없는 경우가 많다. 이는 우리만 느끼는 게 아니라, 대부분의 Spring Boot 개발자들이 겪는 자연스러운 현상이다. WAS와 Spring Boot가 알아서 처리해준다스프링부트 웹 프로젝트가 동작할 때 내장 톰캣 WAS단에서 쓰레드를 알아서 처리해준다. 우리가 컨트롤러에 POST/GET API를 만들면 WAS가 아래와 같은 단계를 자동으로 처리한다.클라이언트가 요청WAS가 쓰레드풀에서 빈 쓰레드 할당해당 쓰레드에서 컨트롤러 로직 실행응답 반환 후 쓰레드풀로 쓰레드 반납즉, 각 HTTP 요청은 알아서 개별 쓰레드에서 돌게 된다. 개발자는 굳이 쓰레드 시작/종료를 조작할 필요가 없다. WAS의 쓰레드풀 덕분에 효율적이고 ..

    Docker Elk Settings Guide. 9.0.2

    테스트에 최적화된 ELK Docker Compose 설정 가이드ELK(Elasticsearch, Logstash, Kibana) 스택을 Docker로 구축할 때 널리 사용되는 docker-elk 예제는 실제 개발 및 테스트 환경에서 사용하기에 몇 가지 불편한 점이 있습니다.이 포스트에서는 기존 docker-elk의 단점을 보완하여 테스트 편의성을 높인 Docker Compose 구성을 소개합니다. git clone https://github.com/MelRanG/docker-elk.git주요 특징 및 개선 사항이 구성은 기존 docker-elk 저장소 기반으로, 아래와 같은 사항들을 개선했습니다.Filebeat 통합 관리기존 예제는 Filebeat를 별도로 실행해야 했지만, 이 설정은 Docker Com..

    사내 생성형 AI의 코드 필터 우회기: 한글 변환을 이용한 질문 전략

    문제 상황사내 생성형 AI는 보안 정책으로 인해 프로그래밍 코드 입력이 차단되어 있습니다. 내부망 환경에서는 VMWARE/개인 노트북을 통해 별도 접속해야 하는 번거로움이 존재하죠. 더 큰 문제는 영어 기술 용어나 오류 메시지 조차도 코드로 오인되어 차단되는 경우가 빈번하다는 점입니다. -> 예시를 보면 필터 기준을 알 수 없음.예시 차단 케이스:"Have you ever gone to korea를 한국어로 뭐라고 해석해?" → 차단"AWS EC2에서 CloudeFront로 연동하는 방법이 뭐야?" -> 차단"Python에서 AWS S3 버킷 리스트 조회 방법" → 허용업무 효율성을 위해선 비즈니스 로직 노출 없이 기술 및 영어 해석 질문을 할 수 있는 방법이 시급했습니다.🛠 시도 1 : 코드 감지 로..

    바로 써먹는 오라클 튜닝

    1. Function오라클에서 Select쿼리에 함수를 바로 사용하지 말고 스칼라 서브쿼리를 사용하자. 스칼라 서브쿼리는 같은 인풋값이면 같은 아웃풋 값을 출력한다. - 스칼라 서브쿼리SELECT emp.employee_id, emp.salary, (SELECT MAX(salary) FROM employees sub WHERE sub.department_id = emp.department_id) AS dept_max_salFROM employees emp; 스칼라 서브쿼리의 경우 결과 값을 오라클 내부에 캐시로 저장한다. 따라서 같은 인풋 값인 경우 캐시에서 바로 아웃풋 값을 출력한다.  만약 스칼라 서브쿼리 수행 도중 값이 변경되면 어떻게 될까?   위의 Select절..

    Connection reset by peer 오류 해결기

    매 시간 실행되는 배치 작업 중 특정일 22:00에 java.net.SocketException: Connection reset by peer 오류와 Socket Timeout 오류가 발생했습니다. 이 문제는 일정 시간이 지나면 자연히 해결되거나, ojdbc 버전 변경으로 일시적으로 해결되었습니다 문제 상황3개의 서비스 중 A 서비스에서만 문제 발생 -> 같은 DB 참조A 서버 오류 지속 시 나머지 서비스도 영향 받음랜덤한 특정일 22:00에만 문제 발생DB 툴에서 쿼리 실행 시 정상 작동서버 재시작 후에도 문제 지속SpringBoot의 ojdbc 버전 변경할 시 일시적 문제 해결 의문점매 시간 배치도는 서비스가 총 3개이다. 각각 시스템이 다르지만 참조하는 DB는 같다. 문제가 되는 A서버는 매 시 정..

    결합 인덱스란?

    결합 인덱스란?

    1. a+b+c 결합 인덱스에서 b,c만 사용하는 경우와 a,b만 사용하는 경우의 차이가 있을까?2. and조건절은 순서대로 필터링할까? 1. 결합인덱스의 사용 의의와 특징-결합인덱스란 무엇인가?결합인덱스는 인덱스의 기준이 되는 칼럼이 2개 이상인 경우를 말한다. 토이 프로젝트만 경험한 경우, 결합인덱스의 필요성을 잘 이해하지 못할 수 있다. 예를 들어, AutoIncrement 속성을 가진 기본 키를 사용하면 충분하다고 생각할 수 있다. 하지만 실제 업무에서는 여러 칼럼을 조합하여 인덱스를 설정해야 할 필요성이 자주 발생한다.  -결합인덱스의 필요성실제 업무 환경에서는 검색 기준이 되는 칼럼이 여러 개인 경우가 많다. 예를 들어, 고객번호, 개설일, 번호라는 세 가지 칼럼이 있고, 40개의 테이블과 3..

    도커와 도커컴포즈

    도커와 도커컴포즈

    배경 향수 추천 서비스를 사용하다가 부트캠프에서 제공하는 EC2서버가 만료됐고 도메인을 유지하고 싶어서 서버 이전 작업을 했다. 기존 서버에 설치했던 파일의 버전을 일일이 찾아서 설치하고 이후 세팅을 메모해놓은 뒤 하나하나 설치하는 게 여간 불편한 게 아니었다. 그래서 아래와 같이 여러 이슈들이 발생했다. https://tte-yeong.tistory.com/127 AWS EC2 서버 이전시 발생한 이슈들 -SQLGrammarException: could not extract Result Set 상황 부트캠프에서 제공해주는 EC2의 기간이 끝났다. 이 서버를 aws 프리티어로 옮기는 과정에서 여러 이슈들이 발생했다. 서버에서 설치한 파일, 설정한 명령어 모두를 기록해놔서 어려움이 없 tte-yeong.t..

    CI CD with 젠킨스

    CI CD with 젠킨스

    배경 향수 추천 서비스를 개발하면서 수동 배포를 사용했다. 인간 젠킨스라고 불리며 push 할 때마다 sh파일을 실행시켜서 빌드를 하면서 여간 불편한 게 아니었다. 다음 프로젝트는 반드시 CI CD를 사용해보자 결심했고 애니메이션 추천 서비스에서 젠킨스를 사용했다. CI CD 젠킨스를 하기 전 CI와 CD에 대해서 간단히 짚고 넘어가자 CI란 무엇인가? 지속적 통합이라는 뜻으로 여러 명이 하나의 코드에 대해서 수정을 진행해도 지속적으로 통합하면서 관리할 수 있음을 의미한다. CI가 있기 전엔 Merge Day라는 날짜를 정해서 개발자들이 모여서 별도로 합치는 작업을 했다. CI를 사용한다면 기능을 잘게잘게 쪼개서 코드 작성이 완료될 때마다 이를 병합할 수 있다. CD란 무엇인가? 지속적 배포라는 뜻으로 ..

    JWT 토큰

    배경 애니메이션 추천 서비스를 개발하면서 JWT를 사용했다. 사용자가 로그인할 때 인증할 필요가 있었고 여러 방법을 비교해본 결과 토큰을 사용한 방식이 그나마 가장? 안전했고 대표적인 토큰 방식인 JWT를 사용했다. JWT토큰 이전에는 어떤 방식으로 인증했는지 그리고 왜 JWT가 탄생했는지에 대해 간단히 알아보자 인증과 인가 들어가기에 앞서 인증과 인가에 대한 개념을 잡고 가야 한다. 인증이란 식별 가능한 정보로 서비스에 등록된 유저의 신원을 입증하는 과정이다. 풀어서 설명하면 회사의 사원증과 같은 개념으로 닉네임이나 사진 같은 정보로 어떤 회사의 회원인지 확인하는 절차이다. 인가란 인증된 사용자에 대한 자원 접근 권한을 확인하는 것이다. 사원증을 예로 들면 인턴의 경우 회사 내에 접근 불가능한 곳이 몇..