전체 글 49

고객사별 HTTP 응답 차이를 배포 없이 해결한 방법: Groovy 스크립트로 런타임 대응하기

문제 상황여러 고객사의 ERP와 외부 연동을 해야하는 결재 모듈에서 고객사별로 다양한 형태의 http response를 대응 해야함ex) A 고객사는 제목 데이터를 A_title, B 고객사는 B-DOC-TITLE 으로 응답Java 모듈에서 고객사가 새롭게 추가 되거나 고객사의 응답 형태가 변경 될 경우, 배포를 진행해야하는 상황고객사가 늘어남에 따라 공통적으로 사용하던 코드에 대해서 예외 처리들이 많아지므로 유지보수 부담이 커짐배포 없이 고객의 요구사항을 맞추기 위해서는 Java 코드가 아닌 다른 방법이 필요함해결 방안DB에 스크립트 형태로 응답을 처리하도록 저장하고자함사용하고자 했던 스크립트 : JS, GroovyGroovy 를 선택한 이유 : Java 코드를 마이그레이션 할 때, 문법에 큰 변화 없..

실무 이야기 2026.01.27

백엔드 개발자 1년차 회고

너무나도 빠르게 1년이 지나갔습니다. 스타트업 초기 멤버로 시작한 첫 회사를 관두고 NHN 아카데미를 거쳐 백엔드 개발자까지의 여정이 지나고보니 순식간이네요  현재 결재서비스개발팀 이라는 곳에 속해서 결재선, 병렬협조, 기록물 등록대장 과 같은 생전 처음 듣는 단어들에 익숙해지며 도메인 지식을 조금씩 축적하고있습니다. 제가 속한 팀은 특이하게 사외/사내에서 여러 시스템을 개발하고 운영하고 있어  ant build + java 1.5 환경 부터 spring boot 3.xx + java 17 까지 너무나도 폭 넓은 기술 스펙트럼을 경험하고 있고, 개발부터 운영까지 담당하여 '처음 구현할 때 제대로 안하면 나중에 힘들다' 라는 기술부채의 타격까지 맛보고있습니다.   최근에는 대표님께서 법인이 앞으로 나아가야..

일상 이야기 2024.06.01

[LDAP] Lightweight Directory Access Protocol 디렉토리 접근 프로토콜

LDAP(Lightweight Directory Access Protocol) 이란? 분산 디렉터리 서비스에 접근하기 위한 표준 프로토콜 디렉터리 서비스는 계층 구조로 조직화된 데이터를 저장하고 검색하기 위한 서비스를 제공 주로 조직의 사용자, 그룹, 자원과 같은 정보를 관리하기 위해 사용 특징 디렉터리 서비스: 정보를 계층 구조로 저장하여 검색이 용이하도록 함. ou / cn 등의 식별자를 통해 디렉토리 내에서 검색이 용이하도록 함 경량: 단순하고 빠른 성능을 갖춘 프로토콜. LDAP이 경량인 이유 : 단순한 메세지 형식의 프로토콜, TCP/IP 통신이라 데이터 전송에 발생하는 오버헤드가 최소화, 데이터 인덱싱을 통해 검색이 용이해짐 클라이언트-서버 모델: LDAP 클라이언트가 LDAP 서버에게 정보를..

신입 백엔드 개발자가 되고 난 후..

전자공학도로 대학교를 졸업 후에는 main안에 모든 동작 코드를 넣고 동작하면 만사 ok이 인 프로그래밍을 해왔다. 그렇게 스타트업을 들어가니 어떤 제품을 개발해내긴 했어도 for문과 if 문의 향연, 그리고 찍먹한 class의 사용 정도였다. 찍먹 정도로 class를 사용하면서 이게 바로 "객체지향"?? 이러면서 뭔가 해낸 기분이 들었다. 그렇게 스타트업을 그만두고 NHN academy 에서 자바와 스프링을 익히며 내가 아는 프로그래밍에 대한 지식은 그냥 리셋했다. 딱히 도움이 되는 지식들이 없었기 때문에, 처음부터 다시 배웠다. 집에서 부트캠프 강의장까지 버스에서 남궁성님의 자바의 정석 동영상을 계속 보며 다녔고, 수업시간에 말씀해주시는 강사님들의 말씀을 놓치지 않으려고 잠을 깨기 위해 허벅지를 때리..

일상 이야기 2023.07.22

[이펙티브자바 3/E] 아이템 1,2,3 : 정적 팩토리 메서드,Builder, 싱글턴 패턴

자바 백엔드 신입으로 업무를 진행하는 와중에 이거는 알아야지~ 라고 듣는 부분들이 해당 책에서 많이 나온다는 것을 알고 바로 공부해야겠다 마음을 먹었네요! 아이템 1. 생성자 대신 정적 팩토리 메서드를 고려 // from : 인자를 받아 해당 타입의 인스턴스로 변경 Date d = Date.from(instant); // of : 인자를 받아 적합한 타입의 인스턴스로 반환 Set faceCards = EnumSet.of(JACK,KING); // valueOf : from + of BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE); // instance, getInstance : 명시한 인스턴스를 반환 // create, newInstance : 새로운..

[디자인패턴] 템플릿 메서드 패턴 과 전략 패턴의 비교

새로 입사한 회사에서 프로그래밍 중 제가 템플릿 메서드 패턴과 전략 패턴을 구분 없이 사용하고 있다 라는 피드백을 받았습니다. 사실 디자인 패턴에 대해 공부를 해보지 않았기 때문에 이 기회를 삼아 한번 정리해보고자 합니다. 제가 회사에서 보았던 코드는 아래와 같이 입력된 값에 의해서 구현체가 달라지는 상황이 었습니다. 아래 코드를 보고 무슨 패턴이지? 라고 생각이 드신다면 이 글을 보시며 함께 공부하면 좋겠습니다! public class Main { public static void main(String[] args) { String input = "a"; Strategy strategy; if (input.equals("a")) { strategy = new StrategyClass1(); } else..

[Spring boot 프로젝트 정리 2] 관리자페이지 도서 카테고리 관리

정리 1 : 자기 참조 - 도서 카테고리 구현 [Spring boot 프로젝트 정리 1] 자기참조 - 도서 카테고리 구현 NHN Acadmey에서 인증과정 중 제가 구현한 파트에 대해 정리하고자 글을 씁니다. 인터넷 도서 사이트를 제작하는 프로젝트였고 그 중 카테고리, 주문 조회, 결제, 캐싱처리를 담당하였습니다. 예스 tk-story-1201.tistory.com 위의 링크의 후속으로 도서 카테고리를 관리하는 페이지를 구현한 내용을 정리해보고자 합니다. 해당 UI는 프로젝트 구현의 시간이 촉박하여 유행하고 있는 vue.js 나 리액트를 쓰지 못했고 커리큘럼상 가장 많이 썼던 Thymeleaf를 의존성을 추가하여 사용하였습니다. (그러므로 Spring boot 기반의 Front Server에서 UI 및 ..

개발/Spring 2023.04.04

[백준 21608 JAVA] 상어 초등학교 : 조건 잘 구현하기

어떠한 알고리즘이 아닌 구현쪽 문제를 풀어보았다. 주어진 조건에 맞추어 주어진 예시 및 구글링해서 나오는 반례들을 모두 넣어서 맞는 값을 도출해내었다. 그러나 백준 제출에는 계속 틀렸습니다가 떠서 문제를 새로 풀었다. (가장 아래에 틀리지만 답은 제대로 나오는 코드를 추가하겠다) 이리 장황한 문제는 일단 문제를 읽고 어떻게 구현할지를 우선 생각하는 것이 아니라 예시를 정확하게 이해하는 것이 중요하다고 느꼈다. 고려한 점 아래 수식은 대각선 방향을 허용하지 않는 상,하,좌,우만을 의미한다. => 주변 = 상,하,좌,우 |r1 - r2| + |c1 - c2| = 1 3개의 조건을 순서대로 코드로 풀어내면 되었다. import java.util.*; public class Main { static int[] ..

[백준 - 14891 JAVA] 톱니바퀴 : 재귀 사용

일단 문제가 너무 장황해서 보기 어려웠지만 하나씩 이해하고자 하니 괜찮았다. 그러나 주어진 그림 예시에서는 하나가 움직이면 연쇄적으로 움직여야하는 상황에 대해 캐치하지 못하였어서 예시 4번에서 계속 원하는 값이 나오지 않았다. (이때까지는 재귀 생각 못함) 그래서 질문 게시판을 보니 연쇄적으로 움직이는 상황도 생각해야한다고 하여 재귀로 풀기로 결심하였다. 고려사항 모든 경우의 수에 맞춰 if문을 작성했다가 너무 코드가 복잡해지고 생각 못한 조건에 대해 커버를 하지 못해 재귀로 변경 1 base가 아니라 0 base 라서 시작시 wheelNum - 1 로 진행 방문했다는 visited를 사용해야만 문제가 해결 되었다. 해당 톱니바퀴를 돌리고자 했었다 라는 표시를 해둬야 연쇄적으로 돌아가야하는 재귀에서 돌아..

[백준 - 10799 JAVA] 쇠막대기 : Stack 사용

생각보다 오래걸린 문제! 스택을 활용하여 풀면 간단하게 풀릴것이라 생각했지만 레이저의 개수를 직접 세어 막대기의 갯수를 세아리려고 하니 재귀함수 까지 생각이 닿았지만 그럴 필요는 없었음 고려사항 주어진 그림을 가로로만 봐서 어려웠는데, 세로로 보니 답이 보였음 레이저가 발견되면 스택에 쌓여있는 갯수만큼 잘린다 -> 그만큼 더하면됨 열린 괄호를 만나면 스택에 넣고, 직전 글자를 확인하여 레이저 이면 pop시키고 토탈 카운트를 누적 연산 레이저가 아닌 닫힌 괄호는 해당 막대기의 마무리에 대한 연산은 없었기 때문에 마지막 조각을 더해준다(+1) import java.util.*; import java.io.*; public class Main { public static void main(String[] ar..