목적 박재성님의 자바 웹 프로그래밍 Next Step의 3장 HTTP 웹 서버 구현을 통해 HTTP 이해하기 파트 실습을 진행하고 있다. 책에 나와 있는 단계들을 하나 하나 스스로 실습하며 적용한 내용들, 만난 이슈 등을 readme에 적고 있는데, 적으면서 내가 모르는 부분들, 더 공부하고 싶은 부분들, 잘 안다고 생각했는데 사실 잘 몰랐던 지식 등을 너무 적나라하게 만나서 그 부분을 나중에 다시 한번 보고 공부할 수 있는 기회로 삼기 위해 이 글을 쓰게 되었다. 해당 글에 대한 코드는 아래의 깃허브에서 확인할 수 있다. https://github.com/Nuouung/web-application-server GitHub - Nuouung/web-application-server: 웹 애플리케이션 서버..
해당 글은 박재성님의 자바 웹 프로그래밍 Next Step의 2장 문자열 계산기 구현을 통한 테스트와 리팩토링의 내용을 정리한 내용입니다. 1. 내가 계산기 애플리케이션을 구현했어! 철수는 개발자다. 지난 날 계산기를 구현해달라는 영희의 요청을 받은 철수는 밤새 작업을 한 결과 사칙연산이 가능한 완벽한 계산기 애플리케이션을 구현했다. 철수의 계산기 애플리케이션의 코드는 다음과 같다. public class Calculator { int add(int i, int j) { return i + j; } int subtract(int i, int j) { return i - j; } int multiply(int i, int j) { return i * j; } int divide(int i, int j) {..
문제 상황 회사 업무를 수행하다 한 가지 불편한 점이 생겼다. 사실 오래 전부터 불편하다 느꼈던 부분이기는 했었는데 이번에 이 부분과 관련하여 제대로 이슈가 터졌기 때문에 그 불편함이 인식의 수준으로 올라온 것 같다. 이슈가 발생한 위치는 바로 검색 기능과 페이지 변경 부분이었다. 보통 특정 리스트에서 검색 기능을 수행하면 우리는 다음 페이지로 가더라도 그 검색 기능이 유지되기를 기대한다. 예를 들어 현재 내가 보고 있는 회원 리스트의 1페이지가 '김'씨로 시작하는 회원의 리스트라면 우리는 2번째 페이지를 가더라도 '김'씨로 시작하는 회원의 리스트가 유지되기를 기대하는 것이다. 그런데 내가 맡은 프로젝트에서는 그러지 않았다. 1페이지에서 '김'씨로 시작하는 회원의 리스트를 보다 2페이지로 넘어가게 되면 ..
디자인 패턴이란? 실무에서 개발을 하면서 가장 두려웠던 점 중 하나가 내가 짜고 있는 이 코드가 다른 개발자에게 어떻게 보일까 하는 부분이었던 것 같다. 이 코드가 과연 읽기 좋은 코드일까? 이 코드가 과연 1년 뒤, 2년 뒤 애플리케이션이 확장했을 때도 유연하게 확장될 수 있는 코드일까? 등을 고민하면서 내가 짜고 있는 코드의 질이 어떠한지 항상 두려워하고 고민했던 것 같다. 디자인 패턴은 이러한, 어쩌면 개발자들에게는 태생적이고 본질적일 수 밖에 없는 '잘 짜여진 코드일까'에 대한 불안감을 해소하기 위한 집단적인 노력의 결과물이라고 할 수 있다. 즉, 디자인 패턴은 잘 짜여진 코드가 무엇인가를 고민하고 이 패턴을 구조화한 집단적인 베스트 프렉티스인 것이다. 이러한 의미에서 디자인 패턴은 어쩌면 선대 ..
들어가기 앞서 본 글은 김영한님의 인프런 강의 자바 ORM 표준 JPA 프로그래밍 - 기본편을 공부하고 공부한 내용을 정리한 글입니다. 강의의 내용을 '공부하며' 정리한 것이기에 부족한 부분이 있을 수 있습니다. 보다 정확한 학습을 원하신다면 위 강의를 참고하실 것을 권합니다. 강의에서 발췌한 사진 두 장이 첨부되어 있습니다. 문제의 여지가 있다면 댓글로 알려주시기 바랍니다. 들어가기 앞서 2 백엔드 개발자로 입사한 지 4개월 차, JPA를 사용하는 새로운 프로젝트에 투입되게 되었다. 취업 준비를 하며 JPA를 학습했던 경험이 있으나 입사를 한 이후 3개월 동안 JPA를 한 번도 사용해 본적이 없었다. 새로운 프로젝트를 준비하며 JPA 관련된 공부를 다시 시작했는데 모두 까먹은 것인지 기억이 하나도 나지..
Quickstart cron4j의 주 엔티티는 스케줄러이다. it.sauronsoftware.cron4j.Scheduler 객체를 사용하면 결정된 시간에 코드를 실행할 수 있다. 스케줄러는 매분마다, 매 5분마다 작동될 수도 '금요일 10시', '토요일을 제외한 2월 16일 오후 12시 30분'처럼 구체적인 시간으로 작동될 수도 있다. cron4j 스케줄러의 사용법은 다음 4단계를 따른다. 스케줄러 객체를 생성한다. 필요한 스케줄을 작성한다. 스케줄을 작성하기 위해 스케줄러가 무엇을, 언제 할지를 결정한다. 이러한 작업은 java.lang.Runnable 혹은 it.sauronsoftware.cron4j.Task 객체를 사용하여 명시할 수 있고, 문자열 혹은 it.sauronsoftware.cron4j...
들어가기 앞서 이번 주 스터디 주제가 java였는데 마침 직장에서 프로젝트를 하며 java의 Date 클래스를 사용할 일이 생겼다. 어디선가 java의 Date, Calendar 대신 java8의 LocalDate와 LocalDateTime 그리고 LocalTime을 사용하라고 권장 받은 적이 있었는데, 그 이유가 무엇일까 궁금해져 java의 시간/날짜 관련 클래스들을 공부하게 되었다. (이번 주 스터디 주제가 java인 부분이 크게 한몫했다 사실.) 이 글은 Naver D2의 Java의 날짜와 시간 API를 참고, 학습한 이후 작성한 글임을 밝힙니다! Java 시간/날짜 API 시대 계보도 JDK 1.0 : java.util.Date (java의 유일한 시간/날짜 API) JDK 1.1 : java.u..
JVM(Java Virtual Machine)이란? Java Virtual Machine, 즉 자바 가상 머신은 자바 바이트코드를 실행하고자 하는 모든 하드웨어에 WORA(Write Once Run Anywhere)을 구현할 수 있도록 설계된 소프트웨어이다. 가상머신이란 프로그램을 실행시키기 위한 물리적인 하드웨어를 소프트웨어적으로 구현한 것을 의미한다. JVM은 자바 언어로 작성된 코드가 특정 플랫폼에 종속되지 않고 모든 플랫폼에 적용될 수 있도록 클래스 로더를 통해 읽어 들인 클래스 파일을 실행시킨다. Java 언어는 JVM 덕분에 특정 OS에 종속적이지 않지만 JVM은 특정 플랫폼에 따라 호환되는 JVM을 맞춰 주어야 하기 때문에 플랫폼 종속적인 성격을 띈다. JVM의 특징은 다음과 같다. 스택 기..
일러두기 본 글은 유튜브 우아한Tech의 [10분 테코톡] 👌던의 JVM의 Garbage Collector와 망나니개발자님의 티스토리 게시글 [Java] Garbage Collection(가비지 컬렉션)의 개념 및 동작 원리 (1/2), YABOONG님의 자바 메모리 관리 - 가비지 컬렉션을 보고 해당 내용을 정리한 글입니다. JVM 자바 가상 머신(영어: Java Virtual Machine, JVM)은 자바 바이트코드를 실행할 수 있는 주체이다. 일반적으로 인터프리터나 JIT 컴파일 방식으로 다른 컴퓨터 위에서 바이트코드를 실행할 수 있도록 구현되나 jop 자바 프로세서처럼 하드웨어와 소프트웨어를 혼합해 구현하는 경우도 있다. (이론적으로는 100% 하드웨어 구현도 가능하나 비효율적이다) 자바 바이트..
Array Array(배열)의 특징 Array는 static한 자료구조. 즉, 자료구조의 길이가 고정되어 있다. Array를 선언할 때 초기값을 할당하지 않으면, 배열의 크기만큼 기본값이 채워진다. primitive type, reference type 둘 다 저장 가능하다. (ArrayList는 reference type만 가능) 다차원 설계가 가능하다. 메모리 공간에 연속적으로 저장된다. java.util.Arrays 클래스에 구현되어 있는 배열을 지원하는 추가 기능이 존재하기는 하지만, 순수한 배열의 경우에는 특정 원소에 대한 읽기와 쓰기, 배열의 길이에 대한 것만 지원한다. Array(배열)의 장점 인덱스 연산자를 사용할 수 있기 때문에, 특정 원소에 접근하고, 수정하는 시간복잡도가 O(1)이다...