본문 바로가기

전체 글

(40)
[Spring] Getter와 Setter 나라면 안 씁니다. [배경] 개발 시간 단축을 위해 ChatGPT에게 여러 조건을 붙여 클래스를 만들어 달라고 했습니다. 몇 초 뒤, 완벽해 보이는 코드가 생성되었습니다. 생성된 클래스에는 setName(), setAge() 같은 setter로 도배되어 있었고 저는 무심코 그걸 복붙하고 사용했습니다. 동작도 이상없이 잘 되어 큰 잘못이 없는 줄 알았습니다. 하지만 Getter와 Setter를 함부로 사용하면 안되는 이유에 대한 세미나를 참석하며 많은 생각을 하게 되었습니다. 겉보기엔 아무 문제 없어 보이지만, Setter 하나 때문에 데이터 불변성이 깨지고, 테스트가 어려워지고, 상태 추적이 꼬이는 코드가 많아질 수 있습니다. 그래서 이장에서는 그 이유에 대해서 알아보겠습니다. [내용]1. Getter , Setter 란..
JUnit5 로 테스트 코드 잘 짜는 법: FIRST 원칙 쉽게 이해하기 [배경] 처음 테스트 코드를 접했을 때는 솔직히 ‘굳이 이걸 왜 써야 하지?’ 라는 생각이 들었습니다. 시간도 부족한데 코드를 또 검증하는 코드까지 작성해야 한다니, 마냥 번거롭게만 느껴졌습니다. 하지만 작은 수정 하나가 전체 동작에 영향을 주는 경험을 반복하면서, 테스트 코드의 필요성을 알게되었습니다. 그래서 이번 글에선 테스트 코드가 무엇이고, 왜 중요한지에 대해 소개하고자 합니다. [내용] 1. Test 코드를 작성해야 하는 이유 먼저 Test란 의도된 대로 정확히 작동하는지 검증하는 절차입니다. 그럼 왜 Test를 해야 하는지 물어보면 여러가지 이유가 있습니다. 먼저 개발 과정 중 예상치 못한 에러나 장애를 미리 발견할 수 있습니다. 배포를 하기전 에러나 장애를 클라이언트보다 빨리 발견하여..
2025 예비군 기본훈련 안보교육 시험문제 정답 2025 상반기 기본 훈련의 안보교육 답입니다.시기나 지역, 유형 (A/B) 마다 답이 다를 수 있으니 확인하시고 제출하시기 바랍니다. 오류에 대한 책임은 모두 본인에게 있습니다. 1. 우리 역사 속 예비군 성격의 초기 호국군이 그것이다. ( O ) 2. 북한은 경제사정이 좋아지면서 무력도발을 자행하고 있다. ( X ) 3. 어떠한 형태로든 충돌이나 전쟁억제력의 필수 요소이다. ( O ) 4. 우리나라 예비군훈련은 개개인의 과학화훈련체계로 발전해나가고 있다. ( O ) 5. 러시아-우크라이나 전쟁에서 재래식 훈련체계를 마련할 예정이다. ( X ) 6. 2번 1) 국방 2) 안보 3) 납세 4) 방위 7. 3번 1) 각개전투교장 2) 화생방교장 3) 실내사격장4) 수류한교장 8. 2번 1) 재래식, 비대칭..
[Spring] 웹의 세 얼굴: 읽기, 쓰기, 소유하기 [배경] 처음 인터넷을 접했을 때, 삐걱거리는 모뎀 소리와 끝없이 로딩되는 페이지에 짜증 냈던 기억 있으신가요? 그게 바로 웹 1.0의 시작이었습니다. 하지만 그 어색한 시절이 없었다면 오늘날 우리가 인스타그램에서 밈을 공유하거나 블록체인으로 돈을 벌지도 못했을 겁니다. 웹 1.0은 책처럼 읽기만 했던 시대, 웹 2.0은 누구나 작가가 될 수 있었던 시절, 그리고 웹 3.0은 우리가 디지털 세상을 소유할 수 있는 미래라고들 하죠. 이 세 단계는 단순한 기술 업그레이드가 아니라, 권력과 창의성의 이동을 의미합니다. 웹의 세 가지 시대를 통해, 기술이 어떻게 우리를 억압에서 해방으로 이끌었는지 알아보겠습니다. [내용] 1. 웹 1.0 : 읽기만 가능한 정적인 도서관 웹 1.0은 인터넷의 태동기, 대략 1..
[Spring] 스프링의 트랜잭션 전파 속성 완벽하게 이해하기 [배경]  한 요리사가 스테이크를 굽고 있는데, 다른 요리사가 갑자기 뛰어들어 '나도 이 불 쓸게!'라고 외치는 상황을 생각해 보세요. 불을 같이 쓰면 스테이크는 제대로 익을까요? 아니면 둘 다 망할까요? 스프링의 트랜잭션 전파 속성은 바로 이런 상황을 정리해주는 주방장 같은 존재입니다. 누가 불을 쓰고, 언제 새 불을 켜고, 누가 망했을 때 롤백할지 결정합니다. 스프링에서 트랜잭션 전파 속성은 단순히 기술적 설정이 아닙니다. 코드의 흐름과 운명을 좌우하는 규칙 입니다. 이번 글에서는 REQUIRED, SUPPORTS, MANDATORY 같은 속성들이 각각 어떤 상황에서 빛을 발하는지, 그리고 잘못 쓰면 어떤 문제가 발생하는지 알아보겠습니다.  [내용]1. 트랜잭션의 시작과 종료 및 전파 속성  트랜잭션..
[HTTP] 개발을 위한 꼭 알아야 하는 상태 코드 [배경] HTTP 상태 코드는 1990년대 초 팀 버너스-리가 웹을 만들 때 단순한 통신 도구로 시작했습니다. 그런데 404 Not Found가 밈이 되고, 418 I'm a Teapot 같은 장난스러운 코드까지 생길 줄은 아무도 몰랐죠. HTTP 상태 코드가 없던 초창기 인터넷에서는 에러 메시지가 텍스트로만 전달됐습니다. 404 대신 '페이지를 찾을 수 없습니다'라는 문구를 일일이 해석해야 했던 시절을 상상해 보세요. 상태 코드가 개발자의 삶을 편리하게 바꿨을 뿐만 아니라 HTTP 응답에서 서버와 클라이언트 간 소통을 명확히 할수 있게되었습니다. 그래서 체계적으로 상태코드들이 뭐가 있고 꼭 알아야 하는것은 뭐가 있는지 정리해 보았습니다.  [내용] 들어가기에 앞서 먼저 HTTP의 정의와 상태코드의 관계..
[Spring] 단 한 줄로 트랜잭션 제어하기 - @Transactional의 강력한 힘 [배경] 개발자가 애플리케이션에서 작업의 연속성을 관리해야 하는 일은 쉽지 않습니다. 은행에서 송금을 하고 있는데, 돈만 빠져나가고 상대 계좌에 입금이 안 된다면 어떨까요? 이처럼 개발자가 트랜잭션 관리의 중요성을 간과한다면 예상치 못한 오류로 인해 심각한 문제를 일으킬 수 있습니다. Java에서 이러한 위험을 막아주는 강력한 도구가 바로 @Transactional입니다. @Transactional 어노테이션은 한 줄의 코드로 데이터베이스와의 상호작용에서 수동적인 오류 방지 부터 모든 것을 제어할 수 있는 힘을 제공합니다. 특히 여러 개의 데이터 조작 작업이 포함된 서비스에서는 트랜잭션을 적절히 적용해야 데이터의 정합성을 보장할 수 있습니다. @Transactional 애너테이션은 이러한 트랜잭션을 간편..
[Spring] RESTful API란? 개발자가 꼭 알아야 할 핵심 개념 총정리! [배경]  우리가 아침에 일어나서 카카오톡으로 메시지를 보내고, 네이버로 날씨를 확인하고, 유튜브로 영상을 볼 때마다, 보이지 않는 곳에서 RESTful API라는 기술이 열심히 일하고 있다는 걸 아셨나요? 이 작은 기술이 없다면 우리가 사랑하는 앱들이 멈춰버릴지도 모릅니다. RESTful API는 사실 우리가 매일 쓰는 인터넷의 기본 규칙, HTTP에서 태어났습니다. 단순히 'GET'이나 'POST' 같은 단어로 시작된 이 기술이 이제는 전 세계 서버와 앱을 연결하는 다리가 되었습니다. 이 작은 단어들이 어떻게 세상을 움직이는 걸까요?  [내용]  1. RESTful API란? RESTful API는 REST(Representational State Transfer) 아키텍처 스타일을 따르는 애플리케이..