Category 114

[읽기 좋은 코드가 좋은 코드다] 책 리뷰

회사에 갓 입사했을 때 매주 금요일마다 프로그래밍에 관한 주제를 가지고 발표하는 시간을 가졌었다. 하지만, 얼마 지나지 않아 프로젝트를 바쁘게 진행하다 보니 매주 하던 PT(Presentation)를 진행하지 못하게 되었다. 많은 아쉬움이 남아서 동기와 스터디를 형성하여 격주로 책을 한 권 선정하고 스터디를 시작하게 되었다. 나의 첫 스터디 주제로 '읽기 좋은 코드가 좋은 코드다' 책을 선정하게 되었다. 스터디에 관한 포스팅은 기존 포스팅 방식과 다르게 대화하는 방식으로 진행 할 예정이다. 이전에 회사에서 PT 했던 방식들은 대게 발표하는 방식으로 진행되었지만, 스터디는 Q&A와 토론하는 과정이 있으면 좋을 것 같아서 정해진 형식 없이 자유롭게 자료를 준비하기로 하였다😄 읽기 좋은 코드? 할머니에게 설명..

Book Review 2022.06.14

향로님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

언제 처음 향로(이동욱)님을 알게 된 지는 잘 기억이 나질 않습니다. 아마 구글링을 하다가 '기억보단 기록을' 이라는 블로그 이름에 끌려 블로그에 들어가게 되었고, 향로님이 쓰신 포스팅을 하나하나 읽게 되었던 것 같네요. 블로그에 정성스레 쓰인 글들을 보면서 '아 나는 언제 이런 영향력 있는 사람이 될 수 있을까?'라는 고민을 했었던 기억이 납니다. 이밖에도 깃허브의 꽉 찬 잔디, 호돌맨님과의 유튜브 채널(개발바닥) 및 그 외 유튜브 채널에서 종종 뵈었던 것 같아요. 일 년 반이라는 시간 동안 향로님의 다양한 활동을 간접적으로 경험하고 또 따라 하면서 제 스스로를 돌아봤을 때, '후회 없이 노력했다'라고 자부할 수 있었습니다. 그만큼 향로님의 영향력이 저한테까지 다가온 것 같네요. 이제는 자연스레 향로님..

Book Review 2022.06.03

TDD 정의 및 암호 검사기 예시

여러 매체를 통해서 Java, SpringBoot, JPA를 공부하다 보니, TDD(Test Driven Development)에 대해 자주 접하게 되었습니다. 또한 실무에서 프로젝트를 진행하였을 때 계속해서 같은 테스트를 진행해봐야 하는 상황이 생겼었는데, 테스트 주도 개발로 개발을 했었더라면 보다 유지보수가 쉬웠지 않았을까 하는 생각이 들었습니다. 그래서 TDD를 공부하게 되었습니다. 이번 포스팅은 TDD를 해야 하는 이유와 간단한 예시를 들어보려 합니다. TDD란? 제목과 같이 테스트로부터 시작하는 개발 방식을 일컫습니다. TDD는 먼저 실패하는 테스트 코드를 작성하고, 테스트를 통과시킬 만큼만 코드 구현을 진행하는 방식입니다. 이후에 어느 정도 테스트 과정이 끝나면 코드 정리(리팩토링)를 통해서 ..

TIL 2022.05.25

레거시와 리팩토링

개발 관련 유튜브나 서적을 보면 레거시(legacy)라는 단어를 자주 접하게 됩니다. 사전적인 의미로 유산이라는 뜻인 건 알았지만, 개발 문화에서는 정확히 어떤 의미로 사용하는지 궁금하게 되어 공부하게 되었습니다. 레거시에 대해 찾다 보니 자연스럽게 리팩토링(refactoring)도 접하게 되었고, 보다 자세히 알고 싶어 강의를 수강하게 되었습니다. 레거시 코드(Legacy Code) 레거시 코드란 나를 포함한 모든 개발자가 기존에 개발했던 코드를 일컫습니다. 어떠한 코드이든 간에 기술의 변화가 많은 이 시점에서 시간이 흐르면 낡은 기술이 될 것입니다. 이밖에도 코드의 가독성이 떨어지는 경우, 코드의 규약이 없는 경우, 코드의 결합도가 높은 경우, 테스트 코드가 없는 경우 등의 여러가지 원인들을 가진 코..

Lecture 2022.05.23

코드 리뷰 주목적

개발을 하다 보면 흔하게 접하는 단어 코드 리뷰. 자주 접하다 보니 코드 리뷰 문화에 관심이 생겼는데, 현재 제가 다니는 회사에서는 코드 리뷰를 따로 진행하고 있지 않아서 백명석 님의 코드 리뷰 강의를 듣게 되었습니다. 짧은 강의였지만 코드 리뷰를 하는 이유와 하는 방법들에 대해 자세히 배워 볼 수 있는 시간이었습니다. 비록 지금 당장 사내에서 코드 리뷰를 진행할 수 있는 짬밥(?)이 안되지만, 시간이 흘러 제가 좋은 리뷰를 해줄 수 있는 리뷰어의 실력을 갖췄을 때 꼭 진행해야겠다는 생각이 들었습니다. 그럼 코드 리뷰가 뭔지 알아볼까요? 코드 리뷰란? 한 명 또는 여러 명의 개발자가 본인이 만든 코드나, 다른 팀원이 만든 코드를 서로 점검해주고 피드백을 해주는 과정을 일컫습니다. 피드백이란 품질 문제, ..

Lecture 2022.05.23

Java MVC 패턴 바로 알기

오늘은 Java의 메인 디자인 패턴인 MVC 패턴에 대해 포스팅하려 합니다. 면접 단골 질문이기도 해서 지난날 면접 준비하면서 열심히 외웠던 기억이 나네요.. 한동안 Node로 프로젝트를 진행하다가 다시 Java Spring 프로젝트를 맡게 되어서 다시 한번 MVC 패턴에 대해 짚고 넘어가려고 합니다. 그럼 MVC 패턴에 대해 알아볼까요? MVC 패턴이란? 역사👣 과거에도 많은 개발자분들이 코딩을 했었고, 초창기에는 한 파일에 모든 코드를 넣었다고 합니다. 그러다 보니 기능을 수정할 때, 그 코드를 찾는 것이 힘든 것은 물론이거니와 하나의 코드를 수정하면 대부분의 코드를 수정해야 하는 경우가 빈번히 발생했다고 합니다. 이 말은 즉슨, 유지보수가 불편했다 라고 생각하시면 될 것 같습니다. 그렇게 시간이 흐..

TIL 2022.05.20

Java Enum 클래스

오늘은 Java Enum 클래스에 대해 알아보려 합니다. SpringBoot를 배우면서 자연스럽게 Enum 클래스를 접하게 되었습니다. 실무에서 흔히 final static string을 사용해서 상수를 정의합니다. 하지만 이렇게 정의해서 코딩하는 경우 여러 문제를 야기시킵니다. 그래서 JDK 1.5 버전부터 새롭게 추가된 것이 Enum class입니다. Enum Class 정의📖 C언어와 C++에서는 열거체(enumeration type)를 사용할 수 있지만, JDK 1.5 이전의 자바에서는 열거체를 사용할 수 없었습니다. 하지만 JDK 1.5 이후부터는 C언어의 열거체보다 더욱 향상된 성능의 열거체를 정의한 Enum 클래스를 사용할 수 있게 되었습니다. Enum은 열거형이라고 불리며, 서로 연관된 상..

TIL 2022.05.19

Java 추상 클래스와 인터페이스 구분

지난 시간에 객체지향 프로그래밍(OOP)에 대해 포스팅을 했었습니다. 객체 지향의 특징 중 추상화(Abstraction)에 대해는 간단한 정의만 하고 넘어갔었습니다. 그 이유는 추상 클래스와 인터페이스를 같은 것이라고 생각을 하시는 분이 많은데, 사용용도 면에서 큰 차이가 있어서 좀 더 정확하게 비교해가며 이번 포스팅을 하려 합니다. 사실 추상 클래스와 인터페이스의 구분은 면접 단골 질문이기도 합니다. 이론적으로는 누구나 외우기만 하면 대답할 수 있습니다. 하지만 그런 이론적인 내용 말고 정작 "언제 인터페이스를 사용하는 게 좋을까요?", "추상 클래스를 사용하면 안 되나요?"라는 실무적인 질문이 들어오면 대답하는 것이 생각보다 어려울 것 같습니다. 저도 마찬가지이고, 그렇기에 공부하면서 포스팅을 진행 ..

TIL 2022.05.18

객체 지향 프로그래밍(OOP)이란?

객체 지향 프로그래밍이란 우리가 실생활에서 쓰는 모든 것을 객체라 하며, 객체 지향 프로그래밍은 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하며 객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말합니다. 현재 제가 주로 사용하는 언어인 JAVA도 객체지향 언어이기 때문에, 자연스럽게 OOP(Object-Oriented Programming)에 대해 공부하게 되었습니다. 절차 지향 절차지향 프로그래밍이란 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법이다. 프로그램을 기능 중심으로 바라보는 방식으로 '무엇을 어떤 절차로 할 것인가?'가 핵심이 된다. 즉, 어떤 기능을 어떤 순서로 처리하는가에 초점..

TIL 2022.05.16

JPA 영속성 컨텍스트 정의 및 핵심요약

스프링 부트와 JPA를 공부하다가 update 기능에서 데이터베이스에 쿼리를 날리지 않아도 기능이 원활하게 수행되는 코드를 보게 되었습니다. 찾다 보니 JPA의 영속성 컨텍스트와 관련이 있는 걸 알아서 이 부분에 대해 포스팅해보려 합니다. JPA 영속성 컨텍스트 JPA 영속성 컨텍스트(Persistence Context)란 엔터티를 영구 저장하는 환경이라는 뜻으로, 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다. EntityManager에 엔티티를 저장하거나 조회하면 EntityManager는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. Entity를 영속성 컨텍스트에 저장하는 코드이며, 해당 코드는 DB에 저장이 안 된 상태이다.(트랜잭션이 끝나야 DB에 반..

TIL 2022.05.12