짧은 SQL 시간을 끝내고, 실습 한 번 해보고 서버 수업으로 들어간 듯 하다. WAS 역할을 해주는 Tomcat 서버에 대해서 공부했고, java로 html파일을 다루는 방법을 배웠다.
[1.15.월요일] - 데이터 모델링
[1.16.화요일] - 프로젝트에서 JDBC 작업(실제로 DBMS와 통신을 수행하는 역할 담당)
- DAO (실제로 데이터에 접근하는 객체)
- lombok 라이브러리 사용 - Properties 객체, Connection 객체
[1.17.수요일]
- JDBC 프로젝트 진행
[1.18.목요일]
- 서버 개발 시작
- Servlet - Tomcat 웹 서버 - Web Server, WAS 차이
[1.19.금요일] - 싱글톤 패턴 - Servlet 실습
- 스프링 프레임워크 책
🧐Web Server / WAS
정적인 요청은 Web 서버, 동적인 요청은 WAS
🧐 Servlet
클라이언트가 어떤 요청을 하면 그 결과를 다시 전송해주는 역할을 한다. 웹 어플리케이션 서버에서 동작하는 프로그램 구현시 사용하며, Servlet은 클라이언트 요청에 따라 서버가 실행할 수 있는 유일한 자바 파일이다. Servlet API를 통해 제공받을 수 있으며, 구현을 위해서는 HttpServlet을 상속 받으면 된다.
🧐 Apache Tomcat
JavaEE & Jakarta EE platform이 요구하는 스펙을 구현한 구현체
tomcat은 내장기능으로 web server, was 내장
📍이번주 회고와 다음주 계획
이번주는 토익 인강을 듣기 시작해서, 집가면 무조건 토익이었다. 추가로 자바랑 스프링 공부 더 하고싶은데 추가적인 시간 내기가 어려웠다. 운동 주 2회, 매일 영어 공부, 코테.. 다음주는 잠을 좀 줄어야겠다.
로깅이란 프로그램 실행 중에 발생하는 오류에 대해 디버깅하거나 운영 중인 프로그램을 모니터링 하기 위해 로그를 기록하는 것. 콘솔에 출력하거나 파일 등에 전달하여 저장하는 행위
SLF4J
풀 네임은 Simple Logging Facade for Java(SLF4J) 라는 이름에서 알 수 있듯이 로깅에 대한 추상화(인터페이스) 역할을 하는 라이브러리이다. 이름에서부터 Facade가 들어가있다. 즉, Facade를 통해서 클라이언트 코드에서는 실제 구현을 모르고 로깅 프레임워크를 사용할 수 있다.
Facade Pattern
Facade는 건축에서 건물 외관이라는 뜻으로 사용되는 용어이다. 이와같이 내부적으로 복잡한 코드를 가져주는 상위 수준의 인터페이스 역할을 하는 객체가 있는 패턴이다.
이와 같이 코드 상에서도 복잡한 서브시스템을 외부에서 감싸고 있는 느낌이다. 계좌를 분석해주는 기능을 구현할 때, 바로 기능을 구현하지 않고, anylze()라는 메소드를 통해서 실행을 시켰었다. 이때 analyze가 전면에서 인터페이스 역할을 해주었다. 실제 analyze() 내부 로직에서 파서가 실행되고 유효성 검사 등을 하는 로직이 돌아가게 되었다.
이 패턴을 통해 복잡성을 줄이고 의존성을 낮출 수 있다.
SLF4J에서 사용되는 Facade Pattern
SLF4J에서 facade역할을 하는 인터페이스는 무엇일까? 바로 logger 객체이다. 그래서 구현부에 상관없이 logging 처리를 할 수 있다. 실제로 SLF4J는 logback 등 패키지 안에 다른 모듈을 포함하고 있다.
Client 클래스는 Subsystem인 하위 객체에 직접 접근하지 않고 Facade 객체에만 접근한다. Client는 Facade 인터페이스에만 의존하고 복잡한 하위 시스템과는 독립적이다.
위 시퀀스 다이어그램을 통해서 런타임시 Client 와 Facade의 상호작용을 볼 수 있다.
자바에 대한 학습을 어느정도 마무리짓고, SQL 공부 시작한 주간. 콘솔앱 만들어보면서 객체지향적으로 코드짜는 방법과 프로젝트에 로거 API를 사용하는법을 배웠다. 이클립스에 모듈 추가하는 법, 코드 작성할 때 디자인 패턴을 어떻게 적용할 수 있는지 배웠다. 내가 소화는 못했더라도 선생님께서 키워드는 다 짚어주시기 때문에, 해당 키워드 가지고 부족하거나 궁금한 부분은 깊은 학습이 필요했다. 프론트엔드 과정에서는 아는 부분이었어서 괜찮았는데, 빠르게 지나간다는게 무슨 말인지 이제야 이해했다. 깊이있는 공부는 내가 다뤄보며 이해해야할 것 같다.
[1.9.월요일] - 저번주차 콘솔 앱 구현 프로젝트 리팩토링하고 이슈남기기 - 자바 람다식, 함수형 인터페이스, 제너릭, 컬렉션, JUnit
[1.10.화요일] - java logger api 사용 실습 - 디자인 패턴(Facade) - 이클립스 build path classpath로 라이브러리 추가 및 제거
[1.10.수요일] - logger 프레임 워크 SLF4J 실습 - 디자인 패턴(Builder) - 직접 builder 패턴으로 구현
[1.11.목요일] - SQL 시작 - MYSQL 설치 및 실습 시작 - 수업에 사용하는 책 <러닝SQL>
빠른 커리큘럼상 한 가지 주제로 하루 이상을 넘기는 일이 잘 없는데 로거 하나로 3일 동안 수업이 진행되었다. 자바의 내장 api 모듈인 logger부터 사용해보고, 현재는 보안 이슈로 사용되지 않는다던 Log4j부터 SLF4J까지 순차적으로 사용해보았다. 중요한 부분인 것 같아서 더 찾아보았다. 스프링 부트의 공통 로그 모듈로 SLF4J가 사용되고 있고, 스프링을 공부할 때 더 깊이있게 학습해봐야겠다. 개념은 아래 포스팅으로 다시 정리했다.
🧐 디자인패턴
디자인 패턴이 아키텍처 같은 서비스를 관통하는 하나의 패턴이라고 생각했는데, 코드 짜는 방법에 대한 디자인 패턴이었다. 정처기 공부하면서 생구행 중얼거리며 달달 외웠던 기억이 난다. 디자인 패턴의 생성 패턴 중 하나였던 Builder 패턴으로 코드를 작성해보면서 왜 생성 패턴인지 이해할 수 있었다. 하나의 디자인 패턴을 공부할 때 어떤 문제를 해결하기 위해 등장했는지 알아야 디자인 패턴을 잘 쓸 수 있다고 한다. 직접 사용해보니 더 이해도가 올라감을 느꼈다.
🧐 Facade 패턴
SLF4J에 대해 공부하면서 파사드 디자인 패턴에 대한 내용도 같이 학습하게 되었다. 왜 파사드 패턴인지 알 수 있었다. 프로그램 시작할 때 코드를 외부에서 추상화시켜준다. 디자인 패턴 중에서 '구조'에 해당하는 이유이다.
🧐 Builer 패턴
- 객체의 생성에 대한 패턴 - 생성시 지정해야할 인자가 많을 때 사용(복잡한 구성의 객체를 효과적으로 생성하는 패턴) - 객체 생성 시 여러 단게를 순차적으로 거칠 때, 이 단계의 순서를 결정해두고 각 단계를 다양하게 구현할 수 있도록 한다.
publicclassPerson{
new Person() // 기본 생성자new Person(6, "yoo") // 매개변수가 있는 생성자 new Person(6, "yoo", "010-1234-1234")
...
}
// 점층적 생성자 패턴
(전) 어떤 매개변수를 넘기는지 알기 어렵고, 복잡해보인다.
publicclassPerson{
Person person = new PersonBuiler.name('Yoo')
.age(20)
.number('010-1234-5678')
.build()
...
}
(후) 명시적으로 작성해서 가독성이 좋아졌다.
🧐 java 라이브러리 사용
이클립스에서 레포지토리 내용을 풀 받으면 자바 파일이 계속 실행 되지않는 문제가 있었다. 이때 제대로된 라이브러리 버전을 읽지 못하는 문제가 있었는데 Java Build Path를 계속 들어가서 Add Library에서 계속 버전이 맞는 라이브러리를 추가해주어야했다. 좀 더 이해가 필요한 부분이다.
🧐 SQL 실습
프로그래머스에서 SQL 풀때마다 원하는 대로 데이터를 확인해 볼 수 없어서 굉장히 답답했는데 이제는 배웠으니까 내가 데이터베이스 생성해서 테이블에 데이터 넣고 빼고 하면서 실습해 볼 수 있을 것 같다. 프레임워크 쓰면서 빨리 DB연결하고 싶다. 다음주 SQL 과정이 끝나면 스프링에서 연동하는 것도 배우게 될텐데 일하면서 마우스로만 딸각거렸던 작업을 직접 구현해보면 얼마나 재밌을까 기대중이다.
터미널에서도 직접 할 수 있고, MYSQL 워크벤치를 이용할 수도 있다.
mysql -uroot -p
show DATABASES;
CREATE DATABASE testDB;
use testDB;
CREATETABLE person(
id INT,
nicname VARCHAR(20)
);
INSERTINTO person (id, nicname) VALUES (1, "Jone");
🍽️ 주간식사
뭘 먹어도 잘 먹지만, 친구들 따라다니면서 더 맛있는 점심을 먹고 있다. 이번주 상암에서 맛있게 먹었던 식사 기록
온돈부리 부타동. 상암 푸르지오시티 2층 있고 가격은 11000원 사케동집이라고 해서 갔는데 다른 메뉴를 시켜보았다. 일반적인 부타동이랑 고기 모양이 다르길래 궁금했다. 먹어보니 약간 매콤해서 더 맛있었다.
선향정 1인 샤브샤브 맑은탕. 누리꿈스퀘어 지하1층에 있는 1인 샤브샤브집 인당 12000원에 칼국수 볶음밥까지 먹을 수 있다. 다들 만족했던 곳.
📍이번주 회고와 다음주 계획
이번주 감기몸살 이슈로 잠을 많이 자고 휴식기를 가졌다. 비타민을 종류별로 따로 먹는게 문제 같아서 보완하고자 종합 비타민으로 바꿨다. 그래서 공부를 많이 하지는 못했다. 다음주 목표는 수업 잘 따라가면서 추가 학습 잘하고, 코테 1일1잔디 실천하기. 경험정리 끝내기)