전체 글 71

UNION 사용 시 주의할 점

대학 시절 백엔드 개발을 하며 '쿼리'를 써볼 일이 많지 않았다.주로 Springboot 프레임워크에서 JPA를 써서 개발을 했기 때문에 간단한 함수만 사용하고 직접 쿼리를 짜서 데이터를 뽑아본 적은 없었던 것이다.물론 대학에서 데이터베이스 수업을 들었을 때는 나름 열심히 했지만.... 대학을 졸업하고 개발자로 취업하여 실무를 보고 있는 지금, Java 코드보다 SQL 쿼리를 훨씬 더 많이 보고 있다.개인 프로젝트를 했을 때 데이터베이스에서는 단순히 필요한 데이터만 가져오고 그것을 정제하는 건 백엔드 코드에서 했었다.그런데 실무에서는 대부분 쿼리에서 원하는 데이터를 원하는 형식으로 정제하고 코드에서는 그저 그것을 리턴하는 정도의 역할만 한다.이것이 내가 경험한 실무와 개인 개발의 가장 큰 차이인 것 같다..

SQL 2025.11.17

[프로그래머스] 92334 신고 결과 받기 파이썬(Python)

오늘은 문자열 문제를 풀다가 만난 시간 복잡도 문제를 해결한 방법을 공유해보려고 한다.문제 링크는 아래 참고!https://school.programmers.co.kr/learn/courses/30/lessons/92334 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 이해하기게시판 이용자 리스트인 id_list가 주어지고, 신고 리스트 report가 주어진다.이때, report는 공백을 기준으로 "신고한 이용자 아이디 신고당한 이용자 아이디"로 이루어져 있다.k번 이상 신고당한 이용자는 아이디 정지 조치를 받게 되는데, 이 이용자를 신고한 사람에게는 ..

알고리즘 문제 2024.10.16

공통 작업을 처리해주는 AOP

우리가 소프트웨어를 만들 때 작성하는 모든 코드는 어떠한 특정 작업을 담당하고 있다.그러나 가끔은 많은 코드에서 공통적으로 필요한 작업들이 있다.메서드가 실행될 때마다 로그를 남긴다거나, 실행 후 결과를 처리하는 작업들 등을 예로 들 수 있겠다. 그런데 이런 공통 작업들을 매 클래스, 매 메소드마다 작성한다면 이건 코드 중복이므로 "클린코드"스럽지 않다.클린코드로 프로그래밍을 하기 위해서 이런 공통 작업들을 한 군데에 모아서 관리할 수 있을까?이런 작업을 도와주는 것이 바로 AOP(Aspect-Oriented Programming)이다!! 우리가 호텔 예약 시스템을 만든다고 가정해보자.이 시스템에는 여러 메서드들이 있고,우리는 메서드가 실행될 때마다 '시작했다'는 메시지를, 실행이 끝나면 '끝났다'는 메..

백엔드/Spring 2024.07.31

Entity와 영속화

오늘은 영속화에 대해 말해보겠다.스프링은 자바에 있는 객체를 어떻게 DB의 테이블과 맵핑하여 데이터를 저장해주는 걸까?우리는 여기서 Entity, EntityManager, EntityContext에 대해 알아봐야 한다. 그전에 "영속화"라는 말에 대해 알아보자.자바 프로젝트 안의 객체는 프로젝트가 꺼지면, 즉 JVM이 꺼지면 사라진다.그런데 우리는 이 객체를 JVM이 꺼진 이후에도 유지하고 싶다는 생각을 하게 된다.객체는 RDB의 관점에서 생각해보면 하나의 Row를 뜻한다.따라서 객체는 하나의 데이터 집합이고, 이를 영속적으로 유지하고 싶다는 생각에서 자바의 "영속화" 개념이 시작된다. 그래서 우리는 영속화 방법으로 객체를 DB에 저장하는 방법을 고안했다.여기서 어떻게 자바 객체를 DB의 테이블과 맵핑..

백엔드/Spring 2024.07.29

예외 처리를 위한 어노테이션

예외처리는 안정적인 프로그램을 만드는 데에 매우 중요한 작업이다.이번에는 이 예외 처리를 도와주는 스프링 어노테이션에 대해 간략히 알아보려고 한다. @ExceptionHandlerHandler는 '자동으로 호출되는 메소드'를 뜻한다.따라서 ExceptionHandler는 '예외가 발생하면 자동으로 호출되는 메소드'를 말한다. 앞서 예외 처리를 어디에서 해줄 것인가와 관련한 글을 올렸다.오늘 알게된 사실..! 예외 처리는 최대한 미루면 좋다!왜 그럴까? Spring에서는 컨트롤러에 모인 예외를 한 번에 처리해줄 수 있기 때문에 최대한 미뤄서 컨트롤러에 예외를 모아놓고 한 번에 처리하면 편하고 좋다!Controller에서 @ExceptionHandler를 써서 예외처리를 해줄 수 있다.@RestControl..

백엔드/Spring 2024.07.25

예외 처리 위치에 대한 고민

네가 싼 똥, 네가 치워.  오늘은 Spring에서 예외가 발생했을 때 어디에서 이 예외를 처리해야할지에 대해 글을 써보려고 한다.사실 이 주제는 답이 정해져있지 않기 때문에 사람마다 생각이 다르고 각자의 논리도 다를 것이다.나 또한 어떠한 정답을 제시하기 보다는 나의 논리를 제시해보려고 한다.이 글을 보면서 여러분도 각자의 논리를 세워 더 합리적인 정답을 유추해보면 좋을 것 같다.   나는 예외가 터진 곳에서 예외 처리를 해야한다고 생각한다.예시 코드로 살펴보자. 호텔을 조회하는 API가 있다. 이를 스프링 3계층으로 나누어 코드를 작성해봤다.@RestControllerpublic class HotelController { private final HotelService hotelService; ..

백엔드/Spring 2024.07.24

M:N을 쓰면 안 되는 이유

RDB의 관계 중에 다대다 관계가 있다.이번 게시글에서는 이 다대다 관계를 쓰면 안되는 이유에 대해 설명해보겠다. 영화와 배우의 관계를 예시로 들어보자.우선 간단하게 이 두 테이블을 만들어보겠다.번호(PK)영화 이름1두근두근 내 인생2전우치번호(PK)배우 이름001강동원002차은우003유해진 이제 영화에 출연한 배우와 배우가 출연한 영화를 나타내기 위해(영화와 배우의 관계를 나타내기 위해) FK(Foreign Key, 외래키) 컬럼을 추가해보려고 한다.번호(PK)영화 이름FK_배우1두근두근 내 인생001, 0022전우치001, 003번호(PK)배우 이름FK_영화001강동원1, 2002차은우1003유해진2위처럼 FK를 각각 테이블에 추가했다. 여기서 문제가 발생한다.하나의 영화에 여러 배우가 출연할 수 있..

백엔드 2024.07.23

DTO에 대해

DTO는 Data Transfer Object의 줄임말로, 데이터 전송 객체를 뜻한다.데이터를 전송한다?어떤 데이터를 어디서 어디로 전송한다는 말일까?오늘은 이 DTO에 대해 알아보겠다. 회원가입과 로그인 기능을 구현해보자.우선 사용자 객체가 필요할 것이다.public class User { private String loginId; private String password; private String nickname;} 나는 User 객체를 위와 같이 작성했다. 이제 Controller 클래스와 Service, Repository 클래스를 만들어서 본격적으로 API 개발을 시작해보려고 한다.그런데 클라이언트에서 받는 요청과 응답에 User 객체를 써도 될까? 우선 그렇게 개발을 해보자..

백엔드/Spring 2024.07.22

직렬화 vs 역직렬화

오늘은 CS 공부를 해보려고 한다.스프링 공부를 하면서 직렬화, 역직렬화 개념에 부딪혔는데 공부를 하다보니 머리를 띵 맞는 것 같은 깨달음을 얻었다..이 글을 보는 여러분도 저와 같은 경험을 하길 희망하며 글을 써보겠다!  직렬화(Serialization)은 객체를 텍스트 파일이나 바이너리 파일로 변환하는 것을 말하고,역직렬화(De-Serialization)는 반대로 텍스트 파일이나 바이너리 파일을 객체로 바꾸는 것을 말한다. 이걸 Java 세상으로 가져오면 여기서 텍스트 파일이나 바이너리 파일은 json이 된다.즉, 직렬화는 객체를 json으로, 역직렬화는 json을 객체로 바꿔주는 것을 말한다. 참고로 json은 데이터를 key-value 형태로 표현하는 방식이다. 이제 이 개념을 스프링으로 가져와보..

백엔드/Spring 2024.07.19

필드, Setter가 아닌 생성자로 의존성을 주입받는 이유

스프링에서 DI 방법은 3가지가 있다.1. 필드로 주입 받기2. Setter로 주입 받기3. 생성자로 주입 받기 지금 우리는 대부분 생성자로 의존성을 주입받는다.그렇다면 왜 나머지 두 방법을 사용하지 않는걸까?나는 테스트와 관련해서 이 세 방법을 알아볼 것이다. 필드먼저 필드로 의존성을 주입받는 방법부터 알아보자.아래 예시 코드를 먼저 보자.public class TripService { @Autowired private TripRepository tripRepository;}@ComponentATripRepository implements TripRepository {}BTripRepository implements TripRepository {}public class Test { @T..

백엔드/Spring 2024.07.19
반응형