전체 글 123

2024 상반기 회고 ( feat. 미루고 미뤘던 숙제 같은 글 )

들어가기 전에 블로그를 시작하고 기록하는 것에 대한 중요성을 느끼면서 매년 상반기, 하반기에 대한 회고록을 작성하고 싶다고 생각했는데 치열한 현대 사회를 겪어 나가느라(보다는 그냥 귀찮아서) 늘 그렇듯 또 미뤘다! 상반기는 6월까지니 따지고 보면 2개월이나 밀린 글을 이제야 쓰는 셈이다. 어찌 됐건 시작했다는 것에 의의를 두면서 하나씩 정리해 보겠다. 무슨 일들이 있었나?어디 떠들고 싶지 않은 사생활을 제외하고 가장 큰 키워드를 추려보면 이사, 이직을 해냈다. 연고지가 없는 곳으로 이동하게 되는 큰 결정을 하면서 가구, 가전, 인테리어를 알아본다고 2월부터 정말(x2) 바빴던 것 같다. 키우는 고양이도 한 마리 더 늘면서 합사까지 동시에 진행했다. 마냥 단순하고 착한 줄 알았던 첫째 고양이는 알고 보니 ..

회고 2024.08.18

abstract class VS interface

들어가기 전에회사를 그만두고 있었던 공백기간에 주로 코드 리팩터링, 내가 지향하는 클린코드의 기준을 만들기 위해 노력했다. 사실 사용자 입장에서는 똑같은 기능이겠지만 뭐랄까... 리팩터링(혹은 최적화가)이 성공적으로 완료되어 내가 원하는 대로 애플리케이션이 실행될 때의 그 쾌감은 동종 업계 사람들이라면 다 공감하지 않을까?  이번 주제는 리팩터링하면서 오래간만에 기초부터 다시 다듬게 된 abstract과 interface다.     추상 클래스(abstract class) 클래스를 일반 설계도라고 한다면, 추상 클래스는 미완성 설계도에 비유할 수 있다. 미완성 설계도로 완성된 제품을 만들 수 없듯이 추상클래스로 인스턴스는 생성할 수 없다. 추상클래스는 상속을 통해서 자손클래스에 의해서만 완성될 수 있다...

Dev/Java 2024.07.15

[일본 여행] 도쿄 4박5일 여행기 - 시부야 스카이/아사쿠사와 나카미세 도리/센소지/푸글렌 아사쿠사 점/시바 공원/도쿄 타워/메가 돈키호테 시부야 본점

이전 포스팅은 여기로 2024.05.17 - [Trip/2024 일본] - [일본 여행] 도쿄 4박5일 여행기 - 도쿄 근교 가마쿠라여행/시치리가하마역/고마치도리거리/롯폰기일루미네이션/롯폰기꼬치집추천/죠몬롯폰기점 [일본 여행] 도쿄 4박5일 여행기 - 도쿄 근교 가마쿠라여행/시치리가하마역/고마치도리거리/롯폰이전 포스팅은 여기로 2024.05.15 - [여행정보/2024 일본] - [일본 여행] 도쿄 4박5일 여행기 - 디즈니씨(DisneySea)후기/게이오플라자호텔디즈니랜드셔틀후기/신주쿠역근처텐동 [일본 여행] 도쿄 4박5일zigo-autumn.tistory.com   시부야 스카이는 예약이 필수  마지막날에는 크게 오전에는 시부야 스카이, 오후에는 아사쿠사와 도쿄 타워를 구경하기로 했다. 다녀온지 얼마..

Trip/2024 일본 2024.07.15

Jenkins, Ansible로 CI/CD 구축하기 (3/3)

이전 포스팅은 여기로 2024.07.02 - [Dev/CI&CD] - Jenkins, Ansible로 CI/CD 구축하기 (2/3) Jenkins, Ansible로 CI/CD 구축하기 (2/3)이전 포스팅은 여기로 2024.07.01 - [Dev/CI&CD] - Jenkins, Ansible로 CI/CD 구축하기 (1/2) Jenkins, Ansible로 CI/CD 구축하기 (1/2)들어가기 전에사실 CI/CD는 전부터 사용하고 있었는데, 뭔가 A to Z로 구축하는 가이zigo-autumn.tistory.com   들어가기 전에 이번 글에서는 Ansible의 보다 자세한 개념과 Jenkins + Ansible을 통해 배포 파이프라인을 구축하는 방법을 정리했다. 글에서 언급되는 Agent는 hosts설정..

Dev/CI&CD 2024.07.15

Junit In Action - TDD를 위한 테스트 원칙, 도구 및 활용 Review - 큰 단위의 테스트를 위한 스텁(Stub)

스텁(Stub)과 모의 객체(Mock)의 필요성애플리케이션을 개발하다 보면 몇몇 코드 혹은 클래스들은 필수불가결하게 다른 클래스 혹은 특정환경에 의존한다.  특정 런타임 환경에 의존하는 애플리케이션을 위한 단위 테스트를 작성하는 것은 매우 어렵다. 테스트는 안정적이어야 하며 반복적으로 수행하더라도 같은 결과가 나와야 하기 때문이다. 예를 들어, 작성중인 애플리케이션이 타사에서 제공하는 웹 서버에 HTTP통신을 해야 하는 경우, 개발 환경에서는 그런 서버 통신을 하는 것이 사실상 불가능하다. ( 이것은 생각보다 실무에서 빈번하게 발생하는 문제이기도 하다. 개발 환경에 필요한 필수적인 인프라 스트럭처가 구체화되지 않았는데 개발자는 기능 구현을 할 수 있어야 한다. 😳 ) 그러므로 실제 장비 지원 없이도 소..

Dev/TDD 2024.07.14

Jenkins, Ansible로 CI/CD 구축하기 (2/3)

이전 포스팅은 여기로 2024.07.01 - [Dev/CI&CD] - Jenkins, Ansible로 CI/CD 구축하기 (1/2) Jenkins, Ansible로 CI/CD 구축하기 (1/2)들어가기 전에사실 CI/CD는 전부터 사용하고 있었는데, 뭔가 A to Z로 구축하는 가이드를 작성해두고 싶어서 강의를 듣고 이것저것 시도(라고 하고 삽질이라고 읽는다) 해보다가 드디어 글을 쓸 결zigo-autumn.tistory.com  들어가기 전에이전 게시글에서는 CI/CD의 등장배경과 실습에 사용할 Jenkins, Ansible에 대한 내용을 간략히 정리했다. 이번 글에서는 실제로 Jenkins를 구축하는 방법에 대해 기술하려고 한다. 기본적인 가상환경 컨테이너의 개념과 서버 간 통신 방식을 알고 있음을 ..

Dev/CI&CD 2024.07.02

Jenkins, Ansible로 CI/CD 구축하기 (1/3)

들어가기 전에사실 CI/CD는 전부터 사용하고 있었는데, 뭔가 A to Z로 구축하는 가이드를 작성해두고 싶어서 강의를 듣고 이것저것 시도(라고 하고 삽질이라고 읽는다) 해보다가 드디어 글을 쓸 결심을 했다. 아무래도 스터디를 위한 글이나, 간단한 트러블 슈팅글보다는 캡처해야 할 내용도 많고 기억을 더듬어야 해서 작성할 때 시간이 오래 걸리는데... 어떻게 7월 초안에는 마무리를 했으면 좋겠다🥹 ... 힘을 내 나 자신아!    각설하고, 본 글에서는 CI/CD의 간단한 개념과 Jenkins, Ansible 을 통한 CI/CD구축 방법등을 담을 예정이다.  이 다음에는 k8s, AWS 환경까지 포함해서 파이프라인을 구축하는 글이 이어지지 않을까 싶다.       CI / CD 는 어디서 시작 되었을까?..

Dev/CI&CD 2024.07.01

Junit In Action - TDD를 위한 테스트 원칙, 도구 및 활용 Review - 소프트웨어 테스트 원칙과 테스트 품질 ( 2/2 )

테스트 커버리지 측정하기 이상적으로는 테스트가 애플리케이션 코드의 100%를 커버하는 것이 좋다. 테스트 커버리지는 그 자체로 코드의 품질을 어느 정도 보증한다. 하지만 절대적이지는 않다. 높은 테스트커버리지가 테스트의 질을 완전히 보장하지는 않기 때문이다. 훌륭한 개발자는 테스트를 실행하여 얻어 낸 기계적인 백분율 수치 이상을 볼 수 있어야 한다.  테스트 커버리지란?테스트 커버리지를 계산하는 데 다양한 지표가 활용될 수 있다. 가장 기본적인 지표는 테스트 묶음을 실행하는 동안 호출되는 애플리케이션의 메서드나 코드 줄의 수를 가지고 나타낸 백분율이다. 혹은 테스트가 호출하는 메서드를 추적해서 집계할 수 있다.  메서드가 어떻게 구현되어 있는지 자세히 알고 있다면 단위 테스트를 작성할 수 있다. 테스트 ..

Dev/TDD 2024.07.01

Junit In Action - TDD를 위한 테스트 원칙, 도구 및 활용 Review - 소프트웨어 테스트 원칙과 테스트 품질 ( 1/2 )

단위테스트를 하는 이유단위 테스트의 핵심 목표는 애플리케이션이 예상대로 작동하는지 확인하고 사전에 버그를 찾아내는 것이다.단위 테스트가 가지는 장점은 다음과 같다. 장점 기능 테스트만 수행했을 때보다 테스트 커버리지를 높일 수 있다 → 기능 테스트로는 수행하기 어렵거나 불가능한 오류 조건에 대해서도 쉽게 테스트할 수 있다. 팀 생산성이 향상된다 → 다른 컴포넌트가 준비될 때까지 기다리지 않고도 질적으로 우수한 코드를 전달할 수 있다. 기능 테스트는 어느 정도 준비가 되어야 실행 가능한 것과 대비된다 소스를 리팩터링 하거나 변경할 때 개발자에게 확신을 준다 → 어디에 문제가 생기는지 쉽게 알 수 있고 애플리케이션을 일일이 디버깅하지 않아도 된다애플리케이션 기능 구현에 도움을 준다 → 단위 테스트가 너무 길..

Dev/TDD 2024.07.01

Junit In Action - TDD를 위한 테스트 원칙, 도구 및 활용 Review - Junit4와 Junit5 비교

Junit4에서 Junit5로 전환하기Junit5는 새로운 아키텍처를 적용한 새로운 패러다임으로  Junit Vintage 테스트 엔진을 활용하여 Junit4에서 Junit5로 전환할 수 있다.Junit Jupiter와 관련한 모든 클래스와 애노테이션은 org.junit.jupiter패키지에서 확인할 수 있고, org.junit 패키지에 Junit4와 관련한 모든 클래스와 애노테이션이 있으므로 클래스 패스에 Junit 5 Jupiter와 Junit4가 모두 존재하더라도 충돌이 발생하지 않는다. ( 예를 들면, Junit4의 @Test 애노테이션은 org.junit.Test에 속해 있고 Junit5의 @Test 애노테이션은 org.junit.jupiter.api.Test에 속해 있어 충돌이 발생하지 않고 ..

Dev/TDD 2024.06.26

Exception - 에러와 예외, Unchecked 와 Checked

에러와 예외프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이러한 결과를 초래하는 원인을 프로그램 에러 또는 오류라고 표현한다. 컴파일 에러(compile error) : 컴파일할 때 발생하는 에러런타임 에러(runtime error) : 프로그램의 실행도중에 발생하는 에러논리적 에러(logical error) : 컴파일도 잘되고 실행도 잘 되지만 의도한 것과 다르게 동작하는 것소스 코드를 컴파일하면 컴파일러가 소스코드에 대해 오타나 잘못된 구문, 자료형 체크 등의 기본적인 검사를 수행하여 오류가 있는지를 알려 준다. 하지만 실행도중에 발생하는 런타임 에러는 언제나 발생할 수 있다.  런타임 에러를 방지하기 위해서는 프로그램의 실행도중 발생할 수 있는 모든 경우..

Dev/Java 2024.06.15

Junit In Action - TDD를 위한 테스트 원칙, 도구 및 활용 Review - Junit 5 아키텍처 개요 ( Junit4와 어떻게 달라졌을까? )

소프트웨어 아키텍처의 개념과 중요성 소프트웨어 아키텍처란 소프트웨어 시스템의 기본 구조를 말한다. Junit 5의 아키텍처 또한 Junit4의 단점을 극복하기 위해 만들어졌다. 아키텍처가 전체 시스템에 미치는 중대한 영향을 이해하기 위해 간단한 두 가지 이야기를 소개한다. ( 책 리뷰하면서 핵심만 추리는게 좋다고 생각했는데 찰떡인 비유라 글을 남겨 놓고 싶어서 포함하게 되었다. Junit5의 구조 내용은 하단에 기재했으니 참고 바란다. )  첫 번째 이야기 : 전화번호부전화번호부를 만들어 출간하는 두 회사가 있다.   A, B회사 모두 비슷한 규격과 가격을 가진 전화번호부를 출간했다. 고객들은 두 제품을 모두 같은 가격에 구매 해서 사용했기 때문에 어떤 전화번호부가 더 좋은지에 대해 알 수 없었다. 그러..

Dev/TDD 2024.06.14

Junit In Action - TDD를 위한 테스트 원칙, 도구 및 활용 Review - 핵심 애노테이션 ( 2/2 )

개발환경IDE :  intelliJ FrameWork : springboot 3.xLaunguage : java 17TestTool : Junit5   예제 소스 링크   HamcrestMatcher 사용하기Hamcrest 라이브러리는 테스트 프레임워크는 아니지만, 간명한 매치 규칙을 선언하는데 도움을 준다. 매치 규칙은 다양한 상황에 쓰일 수 있지만 특히 단위 테스트에서 유용하게 쓰일 수 있다. 매처(Matcher)는 제약(constraint) 혹은 술어(predicate)로 표현되는데 이것을 사용하여 테스트 메서드 안에 있는 복잡한 단언문을 간명하게 처리할 수 있다. 아래는 중복 조건을 검사하는 단언문을 assertThat을 통해 처리하는 예제이다. @Test @DisplayName("Ham..

Dev/TDD 2024.06.14

Junit In Action - TDD를 위한 테스트 원칙, 도구 및 활용 Review - 핵심 애노테이션 ( 1/2 )

개발환경IDE :  intelliJ FrameWork : springboot 3.xLaunguage : java 17TestTool : Junit5   예제 소스 링크   들어가기 전에  개발 방식을 TDD로 전환하면서 테스트 코드 작성 시 여러 난관에 부딪혔다. 공식 가이드를 보며 이것저것 시도해보기도하고, 구글링과 ChatGPT를 통해 예제 코드도 많이 봤고, Git에서 떠돌아다니는 오픈소스의 테스트코드들을 뜯어보며 어떻게 작성하는 게 좋을지에 대해 많은 고민을 했다.  처음에는 Mock이고 Stub이고 하는것들의 개념 없이 그냥 서비스 레이어의 메서드 단위로 테스트를 시작했다.  뭐가 뭔지도 잘 모르는 상태에서 단순히 그냥 '코드를 먼저 작성하는' 정도에 그쳤다.  특히 Controller 관련 코..

Dev/TDD 2024.06.14

JWT 부록, JWS/JWE/JWK

이전 포스팅은 여기로 2024.05.20 - [Dev/Etc] - JWT 란 무엇인가? - Session과 JWT 인증 방식의 비교 / 예제 코드 포함 ( feat. OAuth ) JWT 란 무엇인가 ? - Session과 JWT 인증 방식의 비교 / 예제 코드 포함 ( feat. OAuth )오늘 게시글은 인증 시 많이 사용하는 JWT의 기본 개념과 실제로 어떻게 구현하는지에 대한 내용을 정리해보고자 한다. 관련해서 OAuth 도 공유하면 좋을 것 같아서 함께 묶었다. 이전에 Swagger 사zigo-autumn.tistory.com   이전에 JWT를 정리하면서 궁금했던 점에 대해 따로 정리하는 게시글이다. 간단한 용어정리 정도니 자세한 JWT 내용은 위 게시글을 참고 바란다. JWT 관련 용어 JW..

Dev/Etc 2024.06.03