일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- spring boot
- clean code
- Java
- 기술면접
- BufferedReader
- 벨만 포드 알고리즘
- Controller
- 코딩테스트
- dto
- Django
- 우선순위큐
- 플로이드 와샬
- 유니온 파인드
- top-down
- bottom-up
- compiler
- Python
- kmeans
- 다익스트라
- Android Studio
- 거쳐가는 정점
- 음수가 포함된 최단경로
- 동적계획법
- union-find
- 엔테크서비스
- 최단경로
- disjoint set
- 직무면접
- scikit-learn
- onclick
- Today
- Total
목록Developer's_til/스프링 프레임워크 (25)
춤추는 개발자
[ 📢 세줄 요약 ] 특정 테이블의 데이터를 대량으로 삭제할 수 있는 API 개발 API 속도 개선을 위해 비즈니스 로직을 단계적으로 접근 각 단계별로 속도 개선을 위한 코드 리팩토링 ✅ 배경과 상황 사업팀으로부터 하나의 요청사항을 받았다. 관리자 포탈에서 발신번호를 대량으로 삭제할 수 있는 기능을 만들어주세요. 기존에는 발신번호의 상세 조회 페이지에서 한 건씩 삭제할 수 있는 기능이 있었기에, 대량으로 삭제하는 건 크게 어렵지 않을 거라고 생각했다. 단순히 DB에서 삭제하는게 아니라 타 시스템의 발신번호 삭제 API를 호출하는 방식이였고, 삭제 대상들을 엑셀 파일로 업로드받아서 삭제 프로세스를 진행했을 때, 약 20초안에 200건까지 삭제가 가능했다. 관리자 포탈에서 WAS의 응답값을 기다리는 시간이 ..
✅ Static / 스프링 빈 [ 🔑 간단요약 ] 특정 클래스에서 멤버 변수를 선언 및 초기화를 동시에 할 때, static 클래스의 메서드를 호출해서 초기화 하는 상황에서 NPE가 발생 스프링이 빌드되면서 객체들이 메모리에 저장되는 시점과 스프링 컨테이너가 로드되는 시점 등에 따른 차이 이해하기 ✅ 빈 주입이 안되는... WAS 프로젝트에는 공통적으로 보안 시스템에 로그를 적재하는 로직이 존재한다. 해당 로직들을 리팩토링하는 과정에서 빌드 자체가 실패하는 문제가 있었다. public class YamlUtil { @Autowired private Environment env; public String getProperty(String key) { return env.getProperty(key); } ..
✅ Mybatis Spring 웹 어플리케이션에서 쿼리 기반으로 데이터베이스에 접근하는 SQL Mapper 프레임워크 [ 🔑 간단 요약 ] Mybatis의 쿼리가 작성되는 XML 문서에서 요청 파라미터와 동적 쿼리 기반으로 변수를 작성하는 2가지 케이스 쿼리가 작동하지않는 이슈를 접하고, 각 케이스를 비교 ✅ 배경과 상황 새로운 API를 개발하고 있던 팀원에게 질문을 받았다. 똑같은 쿼리인데 WAS에서는 조회 결과가 안나오고, DB 툴에서는 결과가 나옵니다. 실제로 WAS에서는 조회 결과가 0이 나오고, DBeaver에서는 정확한 조회결과가 나왔다. 이런 경우는 처음 접해서 원인을 어떻게 찾아야할지 고민이었다. WAS와 DB간의 연동, 회사내 방화벽, 반환 타입 등 다각도로 보던 중 동적쿼리가 눈에 들어..
✅ 세줄 요약 🛠 특정 조건에서만 조회 기능이 동작하지 않는 이슈 확인. 🛠 기능 동작 과정을 거슬러 올라간 결과, Emoji 데이터가 포함된 경우와 클라이언트로 반환하기 직전에 지나가는 XSS 필터에서 문제 원인을 발견. 🛠 UTF-16의 특별한 인코딩 방식인 Surrogate pair를 기반으로 문제 해결. ✅ 배경과 상황 [ 에러 상황 ] 담당하고 있는 고객 포탈 사이트에서 특정 조건에만 조회 기능이 동작하지 않는 이슈가 있었다. 가장 먼저, 서버 로그를 살펴보니 아래와 유사한 내용이 남겨져 있었다. 2023-11-10 20:08:17.435 WARN 16980 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [or..
✅ 배경 실무에서는 로깅, 파일 처리 등 비즈니스 로직 외에 다양한 코드를 접할 수 있다. 현업에서 API에 녹아있는 코드를 보면 회사 정책에서 요구하는 로그를 객체에 담아 파일로 보관하는 로직을 접했는데 메서드마다 비슷한 코드가 반복됐다. 이러한 상황을 AspectJ 기반으로 리팩토링하여 유지보수성을 높이기로 계획했다. ✅ AspectJ AspectJ는 스프링 AOP와는 다르게 모든 도메인 객체에 적용할 수 있다는 장점이 있다. 다만, 둘은 다른 목표와 특징을 갖고 있다. [ 기능 및 목표 ] Simply put, Spring AOP and AspectJ have different goals. Spring AOP는 프로그래머가 직면하는 가장 흔한 문제를 해결하기 위해 Spring IoC 전반에 걸쳐 간..
✅ 강의 소개 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있습니다. ✅ 강의별 후기 [ 메시지, 국제화 ] 다양한 메시지를 한 곳에서 관리하는 기능으로 메시지 관리용 파일(ex. messages.properties)에서 화면에 보이는 문구 등을 관리한다. 덧붙여서 메시지들을 나라별 언어로 관리하면 서비스를 국제화 할 수 있다. (ex. messages-ko.properties, messages-en.properties) - 스프링의 경우, 인터페이스인 MessageSource로 메시지 관리 기능을 제공하며, 구현체인 ResourceBundleMessga..
✅ 강의 소개 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다. ✅ 강의별 후기 [ Servlet ] Servlet은 톰캣같은 웹 어플리케이션 서버를 직접 설치하고, 그 위에 서블릿 코드를 클래스 파일로 빌드해서 올린 다음, 톰캣 서버를 실행. Servlet을 생성하여 실제 Http 요청/응답을 수행. HttpServletReqeust / HttpServletResponse를 기반으로 각 객체에 담기는 Parameter에 대한 이해. - Application 클래스 @ServletComponentScan으로 Servlet을 직접 등록해서 사용. - HttpServle..