분류 전체보기
-
2022년 회고주간 회고 2022. 12. 31. 12:35
그 어떤 해보다 밀도있게 시간을 보냈던 2022년이 끝났다. 고생했다는 칭찬을 해 주고 싶으면서도, 아쉬움도 많이 남는 한 해이다. 한 해를 어떻게 보냈는지 키워드를 통해 정리하고, 내년에는 더 성장하기 위해 무엇을 할 것인지 처음으로 정리해본다. 2022년의 3가지 키워드 1. 일단 도전 시드웨일과 메가테라를 전혀 모르고 있던 연초의 이야기다. 2021년, 굳이 졸업 안하고 남아서 컴공 수업을 들었던 학교 공부는 방향성과 노력 둘 다 의구심이 들던 시점이었고, 살은 90kg까지 찌고 있었다. 크리스마스 전후였던 것 같다. 당장 목표를 세워서 이룰 수 있는 경험이 절실하다고 느꼈다. 부모님께 부탁을 드려서 PT 30회를 끊었다. 이전에도 한 번 PT를 받으면서 살을 빼려 했지만 식단조절을 하지 않고, 운..
-
WebSocket을 이용한 실시간 채팅 구현하기 2: 클라이언트Today I Learned 2022. 12. 21. 10:25
WebSocket을 이용한 실시간 채팅 구현 기록은 다음의 네 단계에 걸쳐 작성할 예정이다. WebSocket을 이용한 실시간 채팅 구현 1: 서버 WebSocket을 이용한 실시간 채팅 구현 2: 클라이언트 WebSocket을 이용한 실시간 채팅 구현 3: STOMP WebSocket을 이용한 실시간 채팅 구현 4: 프로젝트에 적용하기 실시간 채팅을 처리하는 서버에 요청을 전송할 간단한 클라이언트를 React를 이용해 구현했다. 동작은 아래의 화면과 같이 이루어진다. 클라이언트에서는 3개의 채팅방에 접근할 수 있다. 각 채팅방을 열면 입력창이 출력되고, 채팅방과 연결된 모든 세션에 해당 사용자가 채팅방에 입장했다는 메시지가 전달된다. 사용자가 메시지를 입력하고 전송 버튼을 누르면 채팅방과 연결된 모든 ..
-
WebSocket을 이용한 실시간 채팅 구현하기 1: 서버Today I Learned 2022. 12. 18. 23:54
WebSocket을 이용한 실시간 채팅 구현 기록은 다음의 네 단계에 걸쳐 작성할 예정이다. WebSocket을 이용한 실시간 채팅 구현 1: 서버 WebSocket을 이용한 실시간 채팅 구현 2: 클라이언트 WebSocket을 이용한 실시간 채팅 구현 3: STOMP WebSocket을 이용한 실시간 채팅 구현 4: 프로젝트에 적용하기 특정 운동 모집 게시글에 참가하는 사용자들이 사용할 수 있는 각 게시글별 실시간 채팅 기능을 구현하기 위한 WebSocket 사용법을 학습하고 있다. 오늘은 Spring에서 WebSocket을 통해 특정 클라이언트가 서버에 메시지를 전송하면 서버와 연결되어 있는 다른 모든 클라이언트들에게 해당 메시지가 전송되는 서버를 구축하는 것을 실험했다. 전체 소스코드는 다음의 링크..
-
Web Socket과 STOMP 이해하기Today I Learned 2022. 12. 17. 02:33
Web Socket 클라이언트와 서버 간의 메시지를 교환하기 위한 통신 방법 중의 하나 2011년 RFC 6455에 의해 표준화 Web Socket을 지원하는 브라우저는 Web Socket Protocol을 지원 Web Socket의 특징 양방향 통신 (Full-Duplex) 데이터 송/수신을 동시에 처리할 수 있음 클라이언트가 요청을 보낼 때만 서버가 응답하는 단방향 통신인 HTTP 통신과는 달리, 클라이언트와 서버가 서로 원하는 순간에 데이터를 주고받을 수 있음 실시간 네트워킹 (Real-Time Networking) 연속된 데이터를 빠르게 노출시킬 수 있음 여러 단말기에 빠르게 데이터를 교환할 수 있음 Web Socket의 주 사용처: 주식, 게임, 채팅, 영상 등 Web Socket 이전의 HTT..
-
Polling 방식을 이용해 간단한 실시간(?) 채팅 구현하기Today I Learned 2022. 12. 15. 23:54
운동 모집 게시글의 참가자들이 참여할 수 있는 실시간 채팅 페이지 구현에 필요한 정보들을 학습하고 있다. 클라이언트와 서버가 상호 연결을 유지한 채로 데이터를 주고받을 수 있는 WebSocket 방식이 등장하기 이전에는 HTTP 방식을 이용해 마치 실시간으로 통신하는 것처럼 보이도록 하는 Polling 방식을 사용했다고 한다. Polling 방식은 클라이언트가 서버에게 일정한 주기로 요청을 보내 응답을 받아오는 식으로 이루어진다. 실시간으로 발생하는 이벤트가 언제 발생할지 예측할 수 없기 때문에 지속적으로 서버에 요청을 보내야 하는 만큼 클라이언트의 수가 많아지면 요청을 처리하는 서버의 부담이 커지고, 요청을 보내는 주기를 늘릴수록 실시간성이 떨어진다는 문제점이 있다. 하지만 HTTP 통신을 이용하기 때..
-
중첩된 DTO을 Validation할 때는 DTO 필드에 @Valid 어노테이션을 붙이기Today I Learned 2022. 12. 14. 01:51
게시글을 올리는 Controller의 구조를 리팩터링하고 있었다. 기존의 게시글 작성 API 요청에 대응하는 PostController에서 기존에 받고 있던 요청 DTO는 다음와 같이 하나의 DTO 객체에 모든 입력 필드 값이 있는 형태로 구성되어 있었다. // dtos/PostAndGameRequestDto.java import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; public class PostAndGameRequestDto { @NotBlank(message = "운동을 입력해주세요.") private String gameExercise; @NotBlank(message = "운동 날짜를..
-
한 번의 끝맺음을 준비하기Today I Learned 2022. 12. 11. 16:01
어제 정리했었던 마지막으로 해야 할 일들조차도 남은 시간 대비 너무 많은 것을 하려 하고 있었던 것 같았다. 선정했던 네 가지 작업들은 모두 애플리케이션의 완성도를 위해 중요하고 결국에는 반드시 마무리지어야 하는 것들이지만, 당장 내일로 다가온 Demo Day에서 보여줘야 할 가치를 준비하기 위해서는 그 안에서도 좀 더 정확한 우선순위 선정을 해 그에 집중할 필요가 있다고 느껴졌다. 발표 데모 데이에서는 8주 동안 프로젝트를 진행하면서 구현한 애플리케이션 서비스를 소개하고, 시연하는 과정을 보인다. 즉, 발표이다. 발표를 진행하면서 남기는 이미지가 사람들이 기억할 나의 이미지를 형성하는 데 큰 영향을 줄 것이다. 발표를 경청하는 사람들에게 가짜 데이터를 보여주는 것으로는 가치를 전달하는 데 한계가 있다...
-
이틀 앞으로 다가온 마감, '완성'된 상태를 만들기 위해 가장 우선되어야 할 작업은 무엇인가?Today I Learned 2022. 12. 10. 23:57
어제 저녁부터 에이미 디자이너님으로부터 전달받은 디자인 기획서대로 화면을 구현하기 위한 컴포넌트 스타일링을 진행하고 있다. 앱 로고를 적용하고 배치를 디테일하게 잡으면서 기존의 최소한의 디자인만을 구현해놓았던 애플리케이션을 사용자가 완성된 형태로 보면서 사용할 수 있도록 전환하고 있다. 현재까지 구현한 화면들 중 게시글 목록 조회, 게시글 상세 내용 조회, 로그인/회원가입 화면의 디자인 작업을 진행했다. 게시글 목록의 글 하나를 선택하면 글의 상세 정보를 확인할 수 있다. 로그인이 필요한 기능을 수행하려 할 경우 로그인 화면으로 이동할 수 있다. 아직 남은 작업이 상당량 존재하기 때문에 남은 시간과 남은 작업들을 살펴보면서 작업의 우선순위를 생각해보았다. 프로젝트를 진행하면서 만든 애플리케이션의 발표일은..