Skip to content

김승수

KimSeungSu edited this page Jul 28, 2024 · 2 revisions

1주차 회고 ( 체스 게임 )


객체지향적 설계

왜 체스를 만들 때 객체지향적 설계를 해야하는가 라는 의문에서 부터 시작하였던 것 같다. 팀원들과 얘기를 나누던 중 객체지향적 설계를 하여 다형성을 활용하면 체스의 여러 규칙을 쉽게 변화시킬 수 있다는 것을 알게 되었다.

”설계는 요구사항이 변경되었을 때 더욱 느낄 수 있다” - 호눅스 님 - 이 하신 말씀이 기억에 남는 주였다.

테스트

테스트 코드 짜기가 쉽진 않았다. 어떤 부분을 테스트 해야하는지 또 모든 경우의 수를 테스트 해야하는지도 판단하기가 쉽지 않았다. 하지만 옆의 동료들이 테스트 코드를 짜는 방법을 통해 @Nested @ParameterizedTest 등을 이용하면 더 알아보기 쉬운 코드를 짤 수 있다는 것을 알게 되었다.

2주차 회고 ( WAS 1주차 )


WAS 이기 전 SERVER

WAS는 http 통신 즉 웹 통신을 지원하기 위해 나온 서버이다. 그렇기에 그 전의 소켓통신을 하는 SERVER에 대해서 아는 것 또한 중요하다는 것을 알게 되었다. 소켓통신은 운영체제가 관리해 주는데 IP와 포트정보등을 저장한 구조체를 통해 소켓 바인딩, 연결 설정, 데이터 송수신 등을 수행할 수 있습다는 것을 알게 되었다.

WAS 구조

WAS 구조를 짜는 것이 가장큰 고민이었다. 나만의 새로운 WAS를 만들 것인지 SPRING과 비슷한 구조의 WAS를 만들 것인지가 고민이였다. 결론은 SPRING과 비슷한 구조의 WAS를 만드는 것으로 결론을 하였다. 그 이유는 SPRING의 동작원리를 구현을 하며 더 깊이 있게 이해하기 위해서 였다.

아래는 현재의 구조이다.

image

3주차 회고 ( WAS 2주차 )


Session 과 Cookie

요새 인증 기능을 구현하면 JWT 를 많은 이유로 사용하곤 한다. 그래서 다시 한번 Session 방식 인증에 대해 할 수 있어 좋은 것 같았다. 특별한 방식을 사용하진 않고 Cookie에 Session Id와 Value를 전달하며 관리를 하였다. 아직 해결하지 못한 문제는 HashMap 자료구조를 통해 세션을 저장하고 있는데 시간이 지남에 따라 저장된 세션 값을 서버에서 삭제하는 기능을 구현하지 못하였다. (스케줄러는 자원을 많이 소모하는 것 같아 고민)

HTML 렌더링

앞으로 계속 HTML 렌더링을 할 것 같아 나만의 사용하기 쉬운 템플릿 엔진을 만들어 보았다. Pattern,Matcher를 사용하여 "{{ model.field }}" 같은 나만의 템플릿 형식을 만들었고 학습 시간에 배운 리플렉션을 통하여 Model에 저장된 객체의 필드값을 런타임에 가져오고 주입해 주었다.

4주차 회고 ( WAS 3주차 )

POST multipart form data 방식으로 이미지 업로드

이미지를 평소에 많이 다루지 않고 다루어도 프레임워크의 기능들을 사용하여 어떻게 전송되는지 알지 못하였었다. 이번 기회에 multipart form data 방식으로 body에 이미지 파일이 전송된다는 것을 알게 되었다. 겪게된 문제로서 기존의 RequestParser가 inputSream을 String으로 바꾼 후 Parsing을 진행하여 이미지가 깨지는 현상이 있었다. 이를 해결 하기 위해 inputStream을 byte 형태로 받은 후 Parsing을 진행할 때 byte값을 기준으로 파싱을 해주어 문제를 해결하였다.

Jdbc를 사용하여 DB연결

Jdbc는 DB 연결을 위한 툴이다. 평소 JPA를 사용하여서 Jdbc 사용이 어색하였다. 자동으로 DB스키마를 만들어주는 DDL 기능을 구현해야 했고 Insert 쿼리 후 Auto Generated Key를 반환하는 설정 같은 것을 조심해야 한다는 것을 알게되었다.

👼 개인 활동을 기록합시다.

개인 활동 페이지

🧑‍🧑‍🧒‍🧒 그룹 활동을 기록합시다.

그룹 활동 페이지

🎤 미니 세미나

미니 세미나

🤔 기술 블로그 활동

기술 블로그 활동

📚 도서를 추천해주세요

추천 도서 목록

🎸 기타

기타 유용한 학습 링크

Clone this wiki locally