본문 바로가기

반응형

개발

(48)
다중 채팅 서버 실습 최근에 네트워크 강의를 수강하고 채팅 서버 실습을 진행했습니다 인터넷에는 뭔가 마음에 드는 채팅 서버 실습이 이상하게 없어 직접 만들었습니다(구현이 이상하거나, 내용이 좋으면 옛날 자료...) 직접 만든 채팅 서버/클라이언트의 동작 모습입니다 클라이언트는 특별한 동작없이도 다른 클라이언트의 채팅 내용을 받을 수 있습니다 자세한 동작 원리는 아래와 같습니다 서버로 입력되는 데이터를 현재 연결된 모든 클라이언트의 소켓에 브로드캐스트합니다(해당 데이터를 전송한 클라이언트를 제외한 모두) 단순히 브로드캐스트하기 때문에 특별한 저장공간은 필요하지 않습니다 클라이언트는 서버의 소켓에 데이터를 쓸 수 있고, 별도의 쓰레드에서 서버로부터의 입력을 항상 대기하고 있습니다 소스코드 추후에 추가 하도록 하겠습니다
재개발 계획과 진행에 대한 작은 포스팅 기존에 진행했던 내용이 거의 기억나지 않는다 어떻게 돌아가는지 파악하기 위해 테스트를 돌려보면서 코드를 파악하기 시작했다 -> 이 과정에서 작게 손대 볼 만한 내용을 모아봤다 1. 날짜 포맷팅 컴포넌트 만들기 2. 뱃지를 만들어주는 컴포넌트 만들기 3. 테스트에 네이밍하기 로컬에서 서버 구동이 안되는 문제도 해결했다 로컬 머신이 예전에 한번 포맷되면서, 깃에서 프로젝트 코드를 다시 받아왔었다 근데 로컬에만 있던 설정 파일은 복원을 못해서 서버 구동에 실패하는 상황이었다 -> 적당히 설정파일 만들어서 해결했다 3번째 이슈인 테스트에 네이밍을 하고 깃에 push를 했다 기존 프로젝트는 dev브런치에서 개발하고 main으로 pr을 보내면, ci/cd를 통해 테스트되고 merge 이후 자동으로 앱이 서버에서 구..
알파벳을 다시 만들어요 이전에 만들었던 알파벳 웹페이지를 다시 개발합니다 그동안 바쁘다고 뒷전이었는데, 매일 꾸준히 시간을 녹이기로 힘든 결정을 내렸습니다 이론적인 부분을 학습하며 개발에 녹여내고 싶다는 욕구가 커졌는데요 이때문에 재개발을 늦출 이유가 없다 생각했습니다 알파벳은 기존에 아래와 같은 기능을 서비스하고 있었습니다 1. 로그인 기능 2. 게시판 기능 3. 깃허브 프로필 뱃지 서비스 기존의 기능은 개선하고, 알림 서비스 등을 추가 할 것 같습니다 개발 과정에서 겪을 수 있는 다양한 경험들을 공유할 예정입니다(사실 이미 재개발은 시작했고, 포스팅은 딜레이가 있습니다...ㅋㅋㅋ) 오랜만에 코드 열어보고 너무 멍판이라 당황했는데요, 면접들어가기 전에 긴장을 푸는 것 처럼 고사성어 외치고 갑시다..! 유비무환!
1차 개발 후기 (T-001) 2월 27일을 끝으로 1차 개발이 끝났습니다 26일까지는 기능 개발에 집중했고, 27일 하루는 문서화에 할애했습니다 후기가 1주일 늦은 이유는 영어 성적 갱신을 위해...(3월 6일 토스...) 후기 시작 1. 그래서 지금 진행된 기능들에 만족 하나? NO 생각보다 진행이 더뎠다 로그인 기능에서 시간을 많이 사용했는데 이 부분을 고려 못했던게 원인같다 2. 일정은 충분했나? YES 일주일 단위로 짤라서 진행해보니 하염없이 개발하는 것 보다 일정도 잡히면서 좀 더 몰입하게 되더라 3. 앞으로 계획은? 아직 구현 할 기능들이 충분히 많은 만큼 일정을 정해서 빠른 시일 안에 다시 진행 할 생각이다 재밌기도 하고 매일 CS공부만 하는 것 보다는 활기가 돈다ㅋㅋ
로그인 테스트 에러 (T-001) 앞선 포스팅에서는 굉장히 합리적인 이유로(귀찮은 일 하기 싫어서..ㅎ) 테스트를 간추리고 간추렸다 이제 개발해야할 부분이라고는 고작 아래와 같이 몇가지가 남아있었다 1. 레포지토리를 이용해 계정을 등록하기 2. 이때 트랜잭션 이용해서 valid한 계정인거 그냥 셋해버리기 3. mockMvc로 post 요청 보내기 4. 이때 csrf토큰 생성해서 담아주기(이미 어떻게 pssing 하는지 미리 좀 알아 봤지..ㅎ 나 좀 꼼꼼함요ㅋ) @Test @DisplayName("계정을 등록 후, 로그인 시 정상적으로 동작") @Transactional public void loginTest() throws Exception{ Account account = Account.builder() .email("asd@emai..
로그인 테스트 (T-001) 폼 로그인 필터를 이용해 로그인 기능을 구현했다 이때 authentication 객체 안에는 유저 네임과 패스워드가 들어가 있다 일반적인 동작 방식은 다음과 같다 1. 유저는 서버에 로그인 페이지를 요청해 이에 해당하는 뷰정보를 받는다 2. 뷰에 담겨있는 폼에 알맞은 내용을 채우고 이를 서버에 전송한다 3. [post] login에 해당하는 핸들러가 이를 처리한다 이번 프로젝트의 경우 스프링 시큐리티가 알아서 해준다 하지만 우리 프로젝트에서는 프론트가 없어 아래와 같은 문제가 발생한다 1. 폼 정보가 없어 직접 프론트에서 [post] login 요청을 보낼 수 없다 2. swagger에 [post ]login 요청이 노출되지 않아 이를 확인 할 수 없다 이를 해결하기 위해 생각한 방법은 2가지가 있다 1..
이메일 회원가입 기능 - 3 (T-001) 이번 포스팅에서는 메일 전송에 대해 알아보겠습니다 실제 메일을 전송하기 위해서는 smtp를 지원해주는 혹은 직접 구현해서 설정을 잡아 주어야 합니다 저는 제가 사용하고 있는 지메일 계정을 이용해서 설정했습니다 이렇게 설정을 잡아두면 javaMailsender 라는 객체에 스프링이 알아서 의존성을 주입해 줍니다 따로 구현할 내용도 없고 그냥 이미 존재하는 메소드를 이용하여 이메일을 전송 할 수 있습니다
2022년 2월 23일 T-001 개발 일기 오늘로 T-001 프로젝트 시작한지 3일차 아마 오늘은 프로젝트 시작 이후 코드 생산에 사용한 시간이 제일 적은 날이다 노느라 그런건 아니구, 몇가지 이슈가 있었다 1. 체력 문제 3일 총 수면 시간이 8시간으로 매우 적었다(만 2일?) 보통 졸리면 커피를 들이부어 버텼는데 오늘은 정말 너무 졸렸다 원두를 다 갈아서 직접 드립으로 내려 마시는데(우리 집에는 장비가 다 있다) 원두 한 봉지를 거의 다 마셔간다... 5시쯤에는 너무 졸려서 그냥 잤다 2. 구현 난이도 오늘 메인은 로그인이었다 이 기능은 하나만 된다고 동작하는게 아니라 이 뒤로도 뭔가 쭉쭉 나와야하는 기능들이 있고, 구현 방법도 다양해서 구상에 시간이 많이 필요했다 그냥 강의 들으면서 코드 복붙하는건데 무슨 난이도가 있냐 할 수 있는데, 나도..
이메일 회원가입 기능 - 2 (T-001) 폼을 유저에게 내려주는 부분은 스킵하도록 하겠습니다 유저가 폼에 정보를 채워서 post요청을 보냈을때의 구현을 해보겠습니다 파라미터에 @valid 어노테이션을 활용하여 먼저 유효한 입력인지 확인해줍니다 이후 올바른 정보라면 서비스 레이어로 데이터를 내려줍니다 서비스 레이어에서는 엔티티 객체의 빌더 메소드를 활용하여 해당 객체로 빌드합니다 다음으로 레포지토리의 save 메소드를 호출하여 객체를 저장합니다 일련의 과정은 모두 트랙잭션으로 처리되어 올바르게 디비에 반영됩니다 이제 토큰을 생성하여 유효한 계정인지 체크해주어야 합니다 이 과정 역시 서비스 레이어에서 해결하겠습니다 저의 경우 엔티티 객체 안에 토큰을 발행하는 메소드를 제작하여 해당 메소드를 호출해서 스트링 형태의 토큰을 만들었습니다 하지만 이 경우..
이메일 회원가입 기능 - 1 (T-001) 이메일을 이용해 회원가입 기능을 구현하겠습니다 먼저 회원 가입 기능은 아래와 같은 순서로 진행됩니다 1. 유저가 회원가입을 요청하면 회원가입 폼을 내려줍니다 2. 유저는 내려받은 회원가입 폼에 정보를 입력하고 해당 폼정보를 리턴합니다 3. 리턴받은 폼정보를 validate합니다 4. 만약 유효한 폼정보라면 이를 바탕으로 회원가입을 진행합니다 4-1. 폼정보를 이용하여 디비에 유저를 등록합니다 4-2. 디비 데이터에 토큰정보를 발행합니다 4-3. 유저가 입력한 이메일로 메일을 전송합니다 이때 발행한 토큰 정보와 함께 서버에 접속 할 수 있는 링크를 유저에게 보냅니다 4-4. 유저가 메일로 받은 링크를 클릭하게 되면, 링크에 포함된 토큰값과 디비에 저장된 값이 일치하는지 확인하여 검증합니다

반응형