전체 글 68

주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 1

주니어 백엔드 개발자가 반드시 알아야 할 실무지식이라는 책을 읽으며 내용을 정리해보겠습니다.먼저 책은 개발을 하면서 이런 점을 고려해야한다라는 것을 알려줍니다.여러분도 프로젝트를 진행하면서 해당 부분을 고민해보시면 좋을 것 같습니다.1. 외부 API현재 거의 모든 서비스와 토이 프로젝트는 외부 API를 필수적으로 사용합니다.제가 토이 프로젝트를 하면서도 아래와 같은 API를 사용했습니다. - 카카오, 네이버 로그인과 같은 OAuth2.0을 사용한 로그인 서비스- Naver Map, Google Maps와 같은 위치기반 서비스- Google Geminie, Chat GPT와 같은 AI 서비스 아마도 백엔드 개발자분들과 되고 싶은 분들도 모두 한번씩 사용해봤을 것입니다.대부분의 토이 프로젝트는 이렇게 외부..

카테고리 없음 2025.12.18

커밋한 코드를 되돌리고 싶을 때

GitLab, GitHub에 작업한 코드를 커밋 후 풀리퀘스트를 했을 때정상적인 상황이라면 승인을 받고 병합되는 것이 일반적인 과정입니다.하지만 어떤 이유로 인해 커밋한 코드를 롤백해야하는 경우가 발생합니다.커밋한 코드에 치명적인 에러가 발생했는데 수정하는데 시간이 오래 걸린다면 에러가 발생하지 않았던수정 전 버전으로 롤백을 하고 커밋을 하는 것입니다. 오늘 제가 겪은 상황이 그랬습니다.두달 전 커밋했던 코드를 롤백해야하는 상황이 발생했습니다.하지만 수정한 코드를 로컬에 가지고 있다가 일주일 뒤 배포에 반영해야했습니다.Revert Commit을 시도했지만 두달 동안 다른 작업들을 하면서 쌓인 커밋을 하지않은 변경사항들이 있어서오류가 발생했습니다.일단 Stash Change로 현재 변경사항들을 저장한 뒤R..

Git 2025.12.08

SQL 서브 쿼리

복잡한 SQL 쿼리문에서 많이 사용되는 것은 서브 쿼리와 JOIN문입니다.위 쿼리문을 사용하는 이유는 원하는 데이터들이 한 테이블에 있다면 좋겠지만 원하는 데이터들이 여러 테이블에 나눠져 있다면 해당 데이터들을 추출하기 위해 서브 쿼리와 JOIN문을 사용해야 합니다. 우선 서브 쿼리문의 동작 과정부터 살펴보겠습니다.서브 쿼리를 포함하고 있는 쿼리문을 외부 쿼리문이라고 합니다.서브 쿼리를 실행한 뒤 외부 쿼리문이 실행되는 순서로 전체 쿼리문이 동작합니다.외부 쿼리 안에 (select .....)를 사용해 쿼리문을 작성하는 것으로 서브 쿼리문을 생성합니다.서브 쿼리 종류서브 쿼리를 사용하는 위치에 따라 종류가 나누어 집니다. 1. 스칼라 서브 쿼리스칼라 서브 쿼리는 외부 쿼리문의 컬럼에 해당하는 부분에 사용..

DataBase 2025.03.02

SQL 쿼리문 정리 - 기초

SQL은 모든 DB에서 사용하는 언어이다. 웹 개발에 JAVA를 사용하듯이 DB에선 SQL언어를 사용해 데이터를 추출, 삽입,수정,삭제하는 것이다.백엔드 개발의 성능에서 가장 중요한 부분을 차지하는 것이 Query문의 실행 속도이다 그렇기 때문에 SQL을 잘 다루고, 파악하는 능력이 중요하다. 글을 쓰고 있는 본인은 쿼리문을 다루는 능력이 어느정도 있다는 생각을 가지고 있었지만 회사에 들어가 실무에서 사용하는 쿼리문을 파악하고 수정하는 업무에서 능력의 부족함을 알고 SQL을 다시 공부하기로 결정했다.SQL 기초 쿼리문1. SELECT SELECT {col1, col2, ...} FROM {Table 명} 2. INSERTINSERT INTO {Table 명} (col1, col2,...) VALUES (..

DataBase 2025.02.15

Kafka- 기본

Kafka란kafka란 실시간으로 스트리밍 데이터를 수집하고 처리할 수 있는 분산 이벤트 스트리밍 플랫폼입니다.말이 어려우니 예를 들어 보겠습니다.MSA 구조로 설계된 어플리케이션은 여러 서버가 있는데 서버가 기능을 수행했을 때 데이터의 변화가 발생하면 다른 서버에 연결되어있는 DB에 있는 데이터에 변경이 필요할 수 있습니다. 이 때 서버간 통신이 필요합니다.서버간 통신을 하는 방법으로는 2가지가 있습니다.1. 다른 서버에 API호출을 통해 서버에 요청을 해서 데이터를 변경하는 방법2. Kafka와 같은 분산 이벤트 스트리밍 플랫폼을 사용하는 방법1번 방법은 서버에 요청을 하므로 요청을 한 서버에 문제가 발생하면 다른 서버에도 영향을 주고, 어플리케이션의 크기가 커질수록 서버가 늘어나고 이 때마다 서버간..

카테고리 없음 2024.07.20

Repository 테스트 코드

테스트 코드 사용 이유 어플리케이션 개발을 하면서 기능이 올바르게 동작하는지 확인하려고 할 때 전체 어플리케이션을 동작시키는 것은 비효율적이고, 오류가 난다면 DB에 변화가 발생할 수 있습니다.위와 같은 이유로 테스트 코드로 확인을 하면서 개발을 해야합니다. 테스트 코드에도 어플리케이션의 전체 구조를 테스트하는 통합 테스트와 일부 구조를 테스트하는 단위 테스트 2개의 종류가 있습니다.예를 들어 Spring Boot로 어플리케이션을 개발할 때 Repository의 쿼리문이 제대로 동작하는지 확인하고 싶을 때는 통합 테스트가 아닌 단위 테스트로 기능을 확인해합니다. 단위 테스트 단위 테스트는 어플리케이션의 전체가 아닌 구조를 분리해 각각 테스트하는 방법입니다.Controller,Service,Reposito..

Spring Boot 2024.06.20

JPA에서 Lock

Lock의 원리 Lock은 데이터베이스 접근에 재한을 두는 것입니다. 좀 더 원리적으로 설명해본다면 Lock을 사용하고 있는 사용자와 다른 사용자들 간의 접근을 제어해 충돌을 방지하는 것입니다. 예를 들어 설명해보겠습니다. 사용자 1,2가 있다고 했을 때 두 사용자가 동시에 한 데이터를 수정하려고 한다면 트랜잭션이 끝나지 않고, 다른 트랜잭션이 시작된다면 나중에 끝나는 트랜잭션의 update쿼리문의 실행 내용만이 실제 DB로 반영되기 때문에 먼저 끝난 트랜잭션의 내용이 없어지게 됩니다. 문제점은 알았으니 Lock을 사용해서 동시성 문제가 해결되는 원리를 알아보겠습니다. 제가 이해한 내용은 Lock은 트랜잭션이 보유하고 있는 권리라는 것입니다. 한 트랜잭션이 Lock을 보유하게 된다면 현재 트랜잭션이 작업..

Spring Data JPA 2024.04.21

Lock

동시성 이란 동시성이란 공유 자원에 다수의 트래픽이 접근하는 것을 말합니다. DB의 관점으로 말해보면 공유 자원은 DB를 뜻하고, 다수의 트래픽은 트랜잭션을 말합니다. 즉, 여러 사용자가 하나의 DB Tuple에 접근했을 때 발생하는 문제를 동시성 문제라고 합니다. 동시성 문제 예시 동시성 문제는 백엔드 개발자에게 중요한 이슈입니다. 예를 들어 3명의 사용자가 재고가 30개인 상품을 주문하는데 첫번째 사용자가 15개, 두번째 사용자가 15개 , 3번째 사용자가 10개를 주문한다고 가정했을 때 3번째 사용자는 주문이 취소되어야합니다. 사용자가 주문을 하는 행위를 Query문으로 생각해본다면 주문한 상품을 조회하는 Select문과 상품의 개수를 차감하는 Update문으로 이뤄줘있습니다. 하지만 동시성 문제를..

Spring Data JPA 2024.04.20

SQL관련 Error

오류 발생 상황 SQL Error는 프로젝트를 컴파일을 할 때 Database를 접근하는 과정에서 나타나는 오류입니다. 정말 많은 이유가 있지만 제가 겪었던 오류들을 위주로 설명하겠습니다 이유 1. SQL Syntax Error - Table 생성시 예약어가 Column이나 Table명에 들어가있는 경우 - like, comment, select, option등과 같이 SQL 문법에서 사용되고 있는 단어들을 테이블 이름,속성으로 설정 2. SQL Error - 연관 관계가 설정되어있는 테이블 중 1개를 삭제하려고 할 때 왜래키로 해당 Tuple이 존재해서 Delete 명령어가 동작 되지 않음 - 저장하려는 데이터의 타입과 SQL 테이블의 데이터 타입이 일치하지 않는 경우 JAVA > SQL) Long >..

Error 정리 2024.04.10

Swagger

Swagger가 필요한 이유 swagger는 api를 사용하는 사람들에게 제공하는 설명서입니다. 프론트 개발자는 api를 호출하고 데이터를 불러오는 일을 할 때 백엔드 개발자에게 요청을 어떻게 보내야하는지 응답의 종류는 무엇이 있는지를 매번 물어본다면 능률이 떨어질 것입니다. 다른 예로는 OpenAPI를 사용하는데 어떻게 사용하는지 나와있지 않다면 누구도 이용할 수 없을 것입니다. 위와같은 이유로 API 명세서를 만든다고 한다면 개발자는 요청변수와 응답값에 대한 설명을 작성하는 것도 반복적인 작업이 많아지기 때문에 Swagger를 사용하는 것으로 소스코드에서 명세서를 같이 작성해 반복적인 작업을 줄일 수 있습니다. Swagger는 API의 사용법과 Test할 수 있는 기능을 제공함으로써 API의 사용을 ..

Spring Boot 2024.03.14