본문 바로가기

전체 글

[Database] SQLD SQL 개발자 시험 후기 [Database] SQLD SQL 개발자 시험 후기 2022년 11월 5일 47회 SQL 개발자 자격증 시험을 봤습니다. 누군가에게는 도움이 될까 싶어, 그리고 기록을 위해 남겨두는 후기입니다. 동기 시험을 본 시점에서 저는 이런 사람이었습니다. 4년차 백엔드 개발자 경제학 전공 SQLD는 난이도가 높은 시험이 아닙니다. 개발자에겐 없어도 그만, 있으면 좋은가...? 싶은 정도의 느낌인 것 같습니다. 만 3년 넘게 개발 업무를 했으면 떨어질 수 없는, 떨어져서는 안 되는 시험이라고 생각합니다. 사실 주변에도 이 시험을 본 기획자분들은 있는데, 개발자분은 못 본 것 같습니다. 그럼에도 SQLD 시험을 본 이유는 두가지입니다. 컴퓨터공학 학위가 없다 SQLP 대비 체험 일단 학위가 없어도 개발 일을 할 수.. 더보기
[디자인 패턴] 전략 패턴 [디자인 패턴] 전략 패턴 전략 패턴이란? 위키피디아에 따르면 전략 패턴은 실행 중에 알고리즘을 선택할 수 있게 하는 행위 디자인 패턴이라고 한다. 객체가 선택할 수 있는 행위, 즉 전략을 객체로 간주하여 캡슐화 해놓고 동적으로 변경할 수 있게 한다고 풀어쓸 수 있을 것 같다. 더 직관적으로 줄이면 행동을 객체로 만든다고 할 수 있을 것 같다. 사실 풀어썼다고 해도 이런 식으로는 잘 와닿지 않는다. 전략 패턴의 생겨나게 된 배경부터, 구체적인 사례까지 쭉 살펴보겠다. 전략 패턴은 왜 생겼을까? 미션: 게임의 직업 클래스를 만들자 전략 패턴의 가장 직관적인 예시는 역시 게임 캐릭터라고 생각된다. 새로 오픈하는 RPG 게임에서 캐릭터의 각 직업 클래스를 구현하게 됐다고 해보자. 구현해야 될 직업은 총 5개,.. 더보기
[JPA] N+1 문제 해결 [JPA] N+1 문제 해결 N+1 문제가 발생했다! 이력서 목적으로 웹사이트를 하나 띄워서 운영하고 있다. 오버스펙일 순 있겠지만 컨텐츠는 DB로 별도 분리해서 관리하고 있다. 처음 만들 당시에는 회사에서 JPA를 쓸 일이 없어 JPA로 만들어 봤는데, 딱히 공부를 했다기보단 이렇게 하니깐 CRUD가 되는군, 참 쉽다 요 정도로 사용만 했었다. 그리고 최근에 간만에 이력서 업데이트 겸 프로젝트 업데이트도 했는데 테스트 중에 문제를 발견했다. 컨트롤러 한 번 호출했는데, 쿼리가 몇 개가 나가는거지. 지금이야 JPA 공부를 한 번 해둔 상태라, 어떤 문제인지 바로 알 수 있었다. JPA를 조금만 찾아봐도 들어봤을 N+1 문제였다. N+1이란? 이건 사실 1+N 문제라고 하는 편이 정확하다. N+1이라 하면.. 더보기
[Spring] 스프링 컨트롤러 인터페이스 저장 방식 개선 [Spring] 스프링 컨트롤러 인터페이스 저장 방식 개선 예시 코드는 단순화된 코드입니다. 스프링 컨트롤러에서 들어오는 모든 요청/응답의 HTTP 바디 메시지를 예외없이 DB에 저장하는 과정 기록. 우리 팀은 업무 특성상 들어오는 모든 요청과 응답 인터페이스 내용을 DB에 저장하도록 되어있다. 인터페이스 테이블은 인터페이스 ID, 요청 전문, 응답 전문, 그리고 그 외 HTTP 헤더 정보 중 필요한 것들을 저장한다. 혹시 모를 유실을 방지하기 위해 일단 들어오자마자 요청 정보를 인서트 하고, 모든 처리가 완료된 후 클라이언트로 주는 응답 결과를 업데이트 하는 방식이다. 다음 내용은 단계별로 어떤 문제점이 있었고, 어떻게 개선해나갔는지로 이어진다. [1] 서비스 로직 수행 중 예외 발생시 업데이트 불가 .. 더보기
[Spring] Feign으로 MultiPart 요청 보내기 [Spring] Feign으로 MultiPart 요청 보내기 예시 코드는 단순화된 코드입니다. 기 시작은 회사 공통 프레임워크의 버전 업그레이드였다. pom.xml에서 1.0.x를 1.0.y로 바꿔주기만 하면 될 줄 알았다. 그런데 메이븐 업데이트를 하고 나니 스프링이 안 뜬다. requestpart.value() was empty on parameter 0로그를 살펴보니 특정 업체 G랑 통신하는 FeignClient 객체를 생성하는 과정에서 오류가 발생했고, 위 같은 에러 메시지를 확인했다. 구글링을 해보니 정확히 일치하는 케이스가 없다. @FeignClient public interface GFeignClient extends MultiPartFeignClient { @RequestMapping(me.. 더보기
[Database] 트랜잭션의 특성과 격리 수준 [Database] 트랜잭션의 특성과 격리 수준 트랜잭션이란? Transaction(트랜잭션)이랑 무엇일까. 영문 위키피디아는 트랜잭션을 이렇게 설명한다. A database transaction symbolizes a unit of work performed within a DBMS against a database, and treated in a coherent and reliable way independent of other transactions. 중요하다고 생각되는 부분만을 취합해보면 트랜잭션이란 작업의 단위이며, 일관성 있고 신뢰할 수 있어야 하며, 다른 트랜잭션에 대해 독립적이다, 즉 상호독립적이다 고 설명할 수 있다. 여기서 작업의 단위란 트랜잭션의 정의이며, 일관성이고 신뢰적이며 상호독.. 더보기
[Java] JPA 영속성 컨텍스트 [Java] JPA 영속성 컨텍스트 JPA란? Java Persistence API의 약자. Java도 알겠고, API도 알겠다. 그런데 이 Persistence라는 건 뭘까? persist는 지속된다, 계속된다는 의미이다. 명사형인 Persistence는 무언가가 지속되는 상태 정도라고 볼 수 있다. persistence를 구글링 하면 위키피디아를 연결해주는데, 위키피디아에서는 persistence를 이렇게 말한다. 프로세스가 생성했지만 별개로 유지되는 상태의 특징 중 한 가지. 별도의 기억 장치에 데이터를 보존하는 목적. 이 특징으로 인해 저장 장치로부터 데이터를 전송하는 작업 및 자료구조 등을 이용해 데이터를 보존하는 것이 가능. 여기서 내 마음대로 중요하다고 생각되는 부분을 강조해봤다. 별개로 유.. 더보기
[Network] URI vs URL vs URN [Network] URI vs URL vs URN URI와 URI, URN의 개념 정리. 엄청 크리티컬한 내용은 아니지만, 알아두어서 나쁠 일은 없을 것 같다. URI? URL? URN? 보통 인터넷 브라우저에서 입력하는 주소를 URL이라고 부른다. 무슨 약자인지는 잘 몰랐으나, 개발을 배우기 전에는 그냥 그런 걸 URL이라고 하는구나 하고 살았다. 개발을 하다보니 URI라는 단어를 접하게 되었다. 뭐지 싶을 법도 했지만, 단어가 가리키는 것은 명확하게 내가 알고 있던 URL이란 것과 같은 형태를 하고 있었다. 그럼 URI == URL일까? 혹은 비슷한 개념일까? 영문 위키피디아에는 아래와 같이 나와있다. A Uniform Resource Identifier (URI) is a unique sequenc.. 더보기