2024년 회고와 2025년 다짐
·
DevLife
01. 서론안녕하세요! 오늘은 2025년을 맞이하여 지나온 2024년을 회고해보고 25년엔 어떤 마음가짐으로 또 보낼지를 다짐하는 시간을 가지려고 합니다.우선 전체적인 2024년 저의 상황과 느낀점을 서술하고 나서, KPT 회고법에 따라 회고를 진행하겠습니다. KPT 회고법이란? Keep : 현재 만족하고 있으며 계속 이어갈 부분Problem : 개선이 필요한 부분Try : 문제 해결을 위한 action 계획 02. 나의 상황 개발자로 첫 취업 그리고 퇴사 저는 23년 9월 대학 졸업 전에 운이 좋게 계약직으로 회사에 들어갔습니다. 신인사 시스템 담당자로 입사하여 백엔드/프론트 할 것 없이 개발을 했습니다. 제가 일 복이 많은 스타일이라 하필 대규모 변경이 적용되던 때에 신인사 파트로 들어가게 되어서 정..
Springboot 3.x 와 Flyway를 쓰며 테스트/운영 DB 서버 밴더 다르게 사용하는 법
·
Programming/spring&java system
미리 결론테스트와 운영 애플리케이션의 DB 종류를 다르게 쓰고 있어서 마이그레이션 쿼리문에 구문 오류 에러가 뜬다면설정 파일에 placeholders 기능과 migration 폴더 세분화를 통해 DB별 쿼리 파일을 만들어 분기해주어 해결한다!신기술은 ChatGPT에 물어보지 말고 동작원리를 최대한 이해하고, stackOverFlow나 공식문서를 확인하자!문제상황제가 하고 있는 프로젝트는 테스트와 운영에서 다른 종류의 DB를 사용하고 있습니다.테스트모드에선 Springboot가 자동으로 생성해주는 H2를 사용하고,운영모드에선 MySql을 사용합니다.그러다보니, 마이그레이션에 사용되는 쿼리문이 특정 Database 사투리에 종속되어 다른 한 쪽에선 구문 오류가 발생했습니다.처음에는 최대한 공용으로 쓸 수 있..
[error] Apache POI NoClassDefFoundError와 AWS EC2 Alpine Linux
·
Programming/spring&java system
abcdedu 시스템에 데이터를 엑셀로 추출하는 기능을 추가했습니다.Apache POI 모듈을 사용하여 구현했는데 분명 로컬에서는 잘 실행 되었던 엑셀 추출 기능이 aws 서버를 사용한 개발 환경에 배포가 되니, 동작하지 않았습니다.이게 그 유명한 "아앗~~~ 분명 내 컴퓨터에서는 됐는데?" 현상인기 하고 곤란함에 머리를 감싸쥐었습니다. 그러곤 로그를 확인해보았습니다.java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11FontManager] with root cause로그에서 Font라는 단어가 힌트를 주었습니다. 데이터를 파일로 추출하는 기능이었기에 해당 파일을 만드는데 사용될 폰트 클래스가 필요한데 그것을 찾을 수 없는 것이라고..
K-DEVCON 밋업 참여 후기 : 셀프 회고 릴레이
·
DevLife
안녕하세요! K-DEVCON 에서 주최한 밋업에 다녀왔습니다. 주제는 '셀프 회고'에 대한 것이였는데, 회고를 통해 개발에 대한 마음가짐이나 방향성에 대해 생각해 볼 수 있는 시간이었습니다.저는 이런 밋업에 처음 참가해보아서 긴장한 마음으로 참가했습니다만 세심한 간식 준비와 물 흐르는 진행자의 진행이 곧 마음을 편안하게 해주었습니다.행사에서 진행된 발표에서, 발표자 분들은 크게 주니어/시니어로 나누어졌습니다. 각 경력차에서 다른 개발자들도 고민하고 있을 법한 것들을 주제로 발표를 진행했습니다. 그래서 발표 하는 내내 집중이 더 잘 되고 배울 점이 많았습니다.  배운 점과 느낀 점글쓰기이번 년도 9월부터 글쓰기 스터디를 구성하여 일 주일에 한번 블로깅을 하는 것을 목표로 실천하고 있었습니다. 팀원들의 리뷰..
Flyway 도입 후기: 장점, 문제점, 해결 과정
·
Programming/spring&java system
부제 : DB Flyway와 SpringBoot를 쓰는 환경에서 Test DB(H2), 운영 DB(MySQL) 구문 오류 해결 과정목차Flyway란?실제로 사용하고 느낀 Flyway 장점겪은 오류와 해결방법결론저는 운영 중인 웹 시스템 abcdedu에 flyway기능을 도입하였습니다.그래서 오늘은 해당 기능의 도입을 통해 얻은 장점과 맞이한 문제점에 대해 얘기해보고 그 해결과정을 설명하려고 합니다.1. Flyway란?데이터베이스 마이그레이션 툴입니다. 스키마와 데이터의 버전을 관리하는데 사용됩니다.참고) 우리가 흔히 알고 있던 데이터 마이그레이션과 혼동될 수 있습니다.보통 데이터 마이그레이션은 데이터를 한 시스템에서 다른 시스템으로 이전하는 것 을 말하지만이 글에서는 관계형 데이터베이스 스키마 관리하는 ..
헥사고날 아키텍처를 떠먹어보자
·
Architecture
팀 프로젝트를 하며 클린 코드, 클린 아키텍처란 무엇인가 고민을 하게 되었습니다.테스트 코드를 작성하며 이리 저리 꼬인 의존성에 따라 모의 객체를 만들어주는 것이 너무 힘들었기 때문입니다..그러던 중, [ 만들면서 배우는 클린 아키텍처 - 톰 홈버그 ] 책을 추천 받아 읽게 되어 해당 내용을 정리하고 간단하게 진행하고 있던 프로젝트에 적용해 본 후기를 작성해보겠습니다.클린 아키텍처와 헥사고날 아키텍처클린 아키텍처에서 소개된 의존성 규칙이 있습니다. 이는 모든 소스코드 의존성은 외부에서 내부로, 고수준 정책을 향해야 한다는 것입니다. 이를 통해 업무 로직(고수준 정책)은 세부 사항들(저수준 정책)의 변경에 영향을 받지 않도록 할 수 있습니다. 이와 같은 구조는 변경에 유연성을 제공하며, 테스트 용이성을 향..
Java null-safety Programming
·
Tech/java
안녕하세요! 오늘은 Java로 프로그래밍할 때 NPE(Null Pointer Exception)을 방지하는 방법에 관해 이야기해 보겠습니다.들어가기에 앞서, 코드 표현에 유의 사항을 알려드립니다.String 같은 라이브러리나 Util 클래스에서 static method로 사용한 것은 메서드 실행 시, 참조하는 클래스가 대문자로 시작합니다. String.valueOf클래스 명이 string, service, controller 같이 보편적인 타입을 의미하고 인스턴스를 만들어서 메서드를 사용하는 경우, 인스턴스를 선언 및 초기화하는 코드 없이 참조하는 클래스가 소문자로 시작합니다.string.equals()우선 우리가 피해야 할 null, NPE이란 무엇이고 언제 발생하는지 보겠습니다.1. null, NPE..
불변객체를 사용 하여 동시성 문제를 방지하자 (feat. Java Record)
·
Architecture
불변 객체란 객체가 생성된 이후에 그 상태(필드 값)이 절대로 변하지 않는 객체 입니다.특징객체 내부의 상태(필드 값)이 변경 되지 않습니다.여러 스레드에서 동시에 읽거나 사용해도 안전하게 동작합니다. 값이 변하지 않아 동기화를 신경 쓰지 않아도 됩니다.상태가 고정되어 있어 외부에서 잘못된 수정이 발생하지 않아 코드의 신뢰성이 높아집니다.생성 방법필드 값이 수정 되지 않도록 객체 생성(초기화)시에 입력되는 값을 기본으로 변경 되지 않게 코드를 구성해주어야 합니다.이를 만족하기 위해 언어가 제공하는 기능들을 조합하여 환경을 조성합니다.Java 불변 객체 만들기필드에 final 키워드final은 필드 값을 한 번 설정한 후에는 변경하지 않겠다는 의미입니다.초기화 시점을 강제 해 줍니다. final 변수는 선..