- 회원가입, 로그인 기능
- 프로필 저장, 업데이트 기능
- 이미지, 파일 전송
- 그룹 이미지 저장 및 검색 기능
| BE: 임경완 | iOS: 양승현 |
|---|---|
| @MoonDooo | @SHcommit |
먼저 서버 소켓을 생성하여 listening 상태여야만 클라이언트 소켓으로부터 체팅을 받아 처리할 수 있다. 하지만 리스닝을 하기 위해서는 while(true)으로 임의로 삭제하기 전까지 유지해야한다. 만약 단일 쓰레드라면 이는 서버 운용이 어렵다. 때문에 쓰레드 풀을 이용하여 비동기적으로 처리한다.
자세히 https://github.com/MoonDooo/socket/wiki/%EC%86%8C%EC%BC%93-%EC%83%9D%EC%84%B1
과정
/group/list혹은/search,/add로 그룹 검색 혹은 추가한다.- 원하는 그룹의 id로
/socket/port를 통해 해당 포트를 반환 받는다. - 클라이언트가 해당 포트로 소켓 연결 및 서버 소켓에서
accept - 서버는
accept된 소켓을 통해 연결된 클라이언트에게 userId 요구 및 로그인 - 로그인 성공시 200반환 및 체팅 시작
- 해당 소켓으로부터 체팅을 받으면 해당 소켓을 받은 ServerSocket가
accept한 다른 클라이언트 소켓들을 가져와 전송
자세히 : https://github.com/MoonDooo/socket/wiki/%EA%B7%B8%EB%A3%B9-%EC%B2%B4%ED%8C%85-%EC%A0%84%EC%86%A1
먼저 사용자가 이미지를 전송한다면 해당 사용자의 userId와 보내고자 하는 그룹의 id를 통해 관련 소켓을 찾습니다. 이때 group의 id는 서버 소켓을 user의 id는 클라이언트 소켓을 찾게 됩니다. 이미지는 FileStore를 통해 저장되며 파일명은 UUID로 저장합니다. 이 UUID를 group id에 해당하는 ServerSocket을 통해 클라이언트 소켓을 찾아 메세지를 보냅니다.
![]() |
|---|
회원 가입과 로그인 기능에는 어떠한 보안 사항이 없다. 익명 서비스이긴 하지만 최소한의 보안 (가로채기, 위장 등)은 갖추어야 한다. 이에 Spring Security를 학습하고 이후 프로젝트에는 반드시 적용해볼 생각이다. 아직 유지 보수성이 좋은 코드라고 생각되지 않는다. 소켓 세션 클래스는 리펙토링을 했음에도 아직 많은 책임을 가지고 있다. 또한 가독성이 한눈에 보기 어렵다. 코드마다 log를 찍으니 어떤 것이 핵심 코드인지 바로 눈에 들어오지 않는다. 또한 예외 처리 부분이 매우 부족하다. 단순히 받아서 런타임 에러로 던지는 것 외에는 사용자에게 어떤 오류가 발생했는지와 같은 해결 방안을 제공하지 못하고 있다. 해당 문제들은 앞으로 반드시 공부해야 할 부분이다.

