API 통신을 하다 보면 대부분 JSON 형태로 데이터를 주고받는다. 이때, 서로 파라미터 작성 방식(카멜케이스,스네이크케이스) 또는 파라미터 명이 다를 경우 데이터를 파싱 하는 도중에 에러 또는 원활하게 파싱이 되지 않는 경우가 있다. 0. 카멜 케이스, 스네이크 케이스 - 카멜 케이스(Camel Case) 첫 글자는 소문자로, 중간 글자들은 대문자로 시작하는 표기법 ex) memberId, memberName, memberPhoneNumber - 스네이크 케이스(Snake Case) 첫 글자는 소문자로, 중간 글자들은 언더바(_)가 포함되는 표기법 ex) member_id, member_name, member_phone_number 1. 코드 - 간단하게 Json 형태로 Request 를 전달받는 코..
프로젝트를 혼자 개발하는 경우에는 파일의 모든 변경사항에 대해서 알 수 있습니다. 그러나 팀으로 작업하는 경우 모든 파일에 대해 수정 사항을 알기 힘듭니다. 또한, Intelli J에서 연결한 DB의 테이블 정보(코멘트 추가)한 것을 확인하고자 하는 경우가 있습니다. 이런 경우에 타임스탬프를 활성화 하여 확인할 수 있습니다. 타임스탬프를 활성화 하면 인텔리제이에서 파일 기록을 조사하지 않고 파일이 마지막으로 수정된 시간을 확인하실 수 있습니다. 추가로 각 파일의 크기도 표시합니다. 1. 타임스탬프 활성화 - 타임스탬프 활성화하는 방법은 아래와 같습니다. 참고!!! 정확한 Intelli J 버전은 모르겠지만, 2017년의 버전에서는 해당 기능을 찾지 못하였습니다. 아마도 2019년 버전 이후의 인텔리제이에..
개발을 배우면서 처음 Java에서 DB 와 관련된 작업을 할 때는 JDBC API를 배웠습니다. JDBC API는 항상 모든 로직 안에서 Connection 객체를 받아오고, SQL 문을 작성하고, 끝나면 close 시켜야 했습니다. 그리고 이러한 중복되고 불필요한 코드를 작성하는 것을 보완해주는 MyBatis, Spring JdbcTemplate 를 배워 사용하였습니다. 최근에는 ORM 기술을 통해 SQL 작성없이 객체를 DB에 직접 저장/관리를 할 수 있게 도와주는 JPA 를 사용하여 DB 작업을 대부분 사용하고 있습니다. 이번 글에서는 이 JPA에 대해서 정리를 해보고자 합니다. 0. ORM(Ojbect-Relational Mapping) 이란? - JPA에 대해서 알기전에 기본이 되는 ORM에 대..
DB(MySQL)에서 DELETE 문 에서 Join 을 사용하여 여러 테이블에서 데이터를 삭제하는 방법을 정리해보고자 한다. 1. 일반적인 DELETE 문 --1. 기본 Delete DELETE FROM T_MEMBER; --2. where 문을 사용한 Delete DELETE FROM T_MEMBER WHERE NAME = '개발자'; 2. Join 을 사용한 DELETE 문 - Join 을 사용하여 Delete 를 할 경우 하나의 쿼리로 다수의 테이블에 있는 데이터를 삭제할 수 있다. 2-1. Inner Join - INNER JOIN 과 함께 DELETE 문을 실행하면 기준이 되는 테이블에서 행을 삭제하고, 다른 테이블에서 일치하는 행을 추가로 삭제할 수 있다. - 예를 들어, T1, T2 두 테이..
회사에서 소스를 분석하는 도중에 의존성 주입을 필드에 @Autowired 어노테이션을 사용하지 않고, 생성자를 생성하여 주입하고 있었다. 그리고 종종 생성자에는 아예 @Autowired 어노테이션도 사용되지 않고 @RequiredArgsConstructor을 사용하고 있었다. 항상 필드 주입으로 사용하고 있었어서, 궁금해서 시니어 분께 여쭤보니 @Autowired는 deprecated 돼가는 분위기이고, 또한 생성자 주입을 권고하고 있기도 하다는 답변을 받았다. 추가로, 인텔리제이에서도 Autowired 어노테이션을 사용하면 아래와 같이 경고메시지를 보여주고 있었다.(매번 자세히 확인도 안 하고 넘어갔는데...) 대충 번역해보자면 "필드 주입은 권장하지 않습니다. 항상 빈에서 생성자 기반으로 종속성을 주..
최근에 함수형 프로그래밍을 많이 사용하게 되면서, Java 에서도 1.8 버전부터 함수형 방식의 람다(Lambda) 형식을 제공하고 있다. 또한, Java 프로그래밍 중 종종 사용하는 Stream 연산에서도 매개변수로 함수형 인터페이스를 받도록 되어있고, 람다식은 반환값으로 함수형 인터페이스를 반환한다. 이렇게 점점 Lambda 를 자주 접하게 되어 이를 한번 정리하고자 한다. 1. 람다(Lambda)식이란? - 람다식(Lambda Expression)이란 함수를 하나의 식(Expression)으로 표현한 것. - 함수를 람다식으로 표현하면 메소드의 이름이 필요 없기 때문에, 람다식은 익명 함수(Anonymous Function)의 한 종류. (함수이지만 함수를 따로 만들지 않과, 코드한줄에 함수를 써서..
예전에는 서비스를 운영하다 보면 직원들에게 알림(장애, 배치, 반영 등)을 알려주기 위해 메시지를 보내거나 하였지만, 최근에는 대부분 슬랙(Slack)이란 메신저를 사용한다. 대부분의 회사가 초기에 구축을 해두어, 업무시에는 간단한 양식을 추가하여 사용하고 있는데, 실제 구축하여 연동을 해보고자 하였다. 이번 글에서는 백엔드를 스프링부트로 하여 간단하게 슬랙을 연동해보도록 하겠다. 1. Slack Bot 생성하기 - 기본적으로 Slack에는 가입되어 있다고 가정하고 진행합니다. - 아래 사이트를 통해서 메시지를 보낼 Slack Bot을 생성합니다. - https://api.slack.com/ Slack은 미래의 업무가 이루어지는 곳입니다 Slack은 여러분의 팀과 소통할 새로운 방법입니다. 이메일보다 빠..
개발을 하다 보면 생성자(Constructor)를 통해 객체 생성을 하게 된다. 해당 객체를 생성할 때 다양한 방법이 있겠지만, 보통 new 연산자를 통해 생성하곤 한다. 그러나 이러한 방법은 객체가 가지고 있는 변수(인자)들이 많아질 경우 해당 인자들이 어떠한 값인지 헷갈릴 경우가 있다. 또한 생성 시에도 필요치 않은 매개변수의 값까지 지정해야 하는 불편함도 있고, 코드를 한눈에 알아보기도 힘들다. 이러한 상황을 대비하여 빌드 패턴을 사용하여 생성자를 관리하면 조금 더 유연하게 관리할 수 있는데, 이를 정리해보고자 한다. 1. 빌더 패턴(Builder Pattern) 이란? - 복잡한 객체를 생성하는 방법을 정의하는 클래스와 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를..
Java 언어를 사용해 개발을 하다 보면 DTO, VO 개발을 하다 보면 Lombok(롬복) 이란 라이브러리를 사용하여 개발을 하곤 한다.(물론 아직까지도 안 쓰는 회사도 있기도 하겠지만....) 이번 글에서는 자주 사용하는 Lombok 이란 라이브러리에 대해서 정리해보고자 한다. 1. Lombok 이란? - Java 의 라이브러리로 반복되는 메소드를 Annotation(어노테이션) 기반으로 코드를 자동으로 완성해주는 라이브러리이다. - Lombok 을 이용하면 Getter, Setter, ToString 등과 같은 다양한 코드를 자동 완성시킬 수 있다. - Lombok 을 이용해서 작성한 코드는 컴파일 과정에서 Annotation 을 이용해서 코드를 생성하고 이런 결과물이 .class 에 담기게 된다...
올해 5월, 개발자로서의 삶에서 처음으로 이직을 하게 되었습니다. SI 중소기업에서 약 2년 3개월을 다니었다가, 대기업 계열사의 자체 서비스가 있는 기업으로 이직을 하였고, 최고의 결과는 아니지만 시기가 시기인 만큼 나의 현재 상황에서는 만족스러운 결과가 되었습니다. 그리고 이직한 지 한 달 정도 지나게 되는데, 이직을 결심한 이유와 과정을 기록하고자 작성을 해보려고 합니다.(글을 잘 못쓰지만, 일단 작성을 해보자!!!) 1. 이직을 결심하게 된 이유 가장 솔직하게 말을 해보자면, 나에게 할당된 업무량이 너무 많아지면서 야근의 횟수와 시간이 너무 많았기 때문이었습니다. 입사 당시에는 아무래도 신입이다 보니 큰 기대를 안 하셨다가, 첫 업무를 맡고 프로젝트를 진행하면서 인정을 해주시면서 업무를 하나하나씩..