-
Notifications
You must be signed in to change notification settings - Fork 0
Week5 멘토링 일지
동재 edited this page Dec 12, 2023
·
1 revision
이번 주 멘토링에서 이야기 나누면 좋을 주제입니다.
멘토가 보기에 우리 팀은 어떤지 의견을 구해보세요.
- 사용자가 서비스를 사용할 수 있는 수준으로 주요 기능이 개발되었다.
- GitHub 저장소만 봐도 프로젝트 개요, 기술적 도전, 구현 과정을 누구나 알 수 있다.
- 나와 우리 팀의 기술적인 자랑 거리나 강점이 무엇인지 그 이유와 함께 설명할 수 있다.
- 6주차에 리팩토링 또는 개선할 영역이 무엇인지 인지하고 있다.
- 뷰컨트롤러에서 인자값을 넘겨줄 지, 뷰모델을 넘겨줄 지 고민
-
- 뷰컨트롤러와 뷰모델의 관계는 꼭 1대1이여야하는가?
- 상황
- 홈에서 상세페이지로 넘어갈 때 상세페이지에는 postID가 필요합니다. 이때, HomeViewController에서 DetailViewModel을 생성하면서 인자로 postID를 넘겨주는 방법과 HomeViewController에서 DetailViewController만 생성하고 인자로 postID를 넘겨준 후 DetailViewController 내부에서 DetailViewModel을 생성하면서 인자를 주입해주는 방법중에 고민입니다.
-
- 토큰 만료 관리에 대한 예시 코드 중에서 클라이언트에서 JWT를 파싱하여 expire date를 검사하여 요청을 보내는 코드를 봤는데, 실무에서도 이렇게 구현되기도 하는지?
- 페이지네이션 구현 방법 중에 contentOffset을 활용하거나 prefetch를 활용하는 것 크게 두 가지로 있는 것 같은데, 어느 쪽을 추천하시는지.
- 네트워크 호출을 최소화 하는 것과 화면전환 간 뷰 컨트롤러 매개변수 전달을 최소화하는 것 중 어느 쪽을 선택해야할지.
소켓통신에서 JWT를 헤더에 씌우는 방법.. URLSessionWebSocketTask를 이용 ⇒ 해결
WebSocket.shared.url = URL(string: "ws://www.village-api.shop/chats")
try? WebSocket.shared.openWebSocket()
WebSocket.shared.sendJoinRoom(roomID: "164")
func openWebSocket() throws {
guard let url = url else { throw WebSocketError.invalidURL }
let urlSession = URLSession.shared
let webSocketTask = urlSession.webSocketTask(with: url)
webSocketTask.resume()
self.webSocketTask = webSocketTask
self.startPing()
self.receiveEvent()
}
// 아래와 같이 헤더에 토큰을 씌워서 보내봤는데, 서버에서 헤더를 인식하지않습니다.
// 현재 JWT를 씌우지않고 소켓통신을 하는 방식으로 진행중입니다.
func openWebSocket() throws {
guard let url = url else { throw WebSocketError.invalidURL }
var request = URLRequest(url: url)
guard let accessToken = JWTManager.shared.get()?.accessToken else { return }
request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let urlSession = URLSession.shared
let webSocketTask = urlSession.webSocketTask(with: request)
webSocketTask.resume()
self.webSocketTask = webSocketTask
self.startPing()
self.receiveEvent()
}
-
현재 user 서비스 레이어에 너무 많은 레파지토리가 사용중입니다. 이렇게 user를 다루는 서비스에서 다른 리소스들에 대한 레파지토리를 많이 사용하는 것이 일반적인지 궁금합니다
constructor( @InjectRepository(PostEntity) private postRepository: Repository<PostEntity>, @InjectRepository(UserEntity) private userRepository: Repository<UserEntity>, @InjectRepository(PostImageEntity) private postImageRepository: Repository<PostImageEntity>, @InjectRepository(BlockUserEntity) private blockUserRepository: Repository<BlockUserEntity>, @InjectRepository(BlockPostEntity) private blockPostRepository: Repository<BlockPostEntity>, @InjectRepository(RegistrationTokenEntity) private registrationTokenRepository: Repository<RegistrationTokenEntity>, private s3Handler: S3Handler, private configService: ConfigService, ) {}
-
지금 까지 서버 한대에서 개발 테스트를 진행하였습니다. 이러다 보니 저희 백엔드에서 테스트 할 때 iOS 분들이 서버와 통신을 못하여 불편한 문제가 발생하여서 서버를 분리하는 작업을 진행하였습니다. 현업에서는 개발할 때 서버를 어떻게 분리하여 작업하시는지 궁금합니다.
-
소켓을 통해 채팅을 하는데 있었던 문제였는데 글로 쓰기가 많이 길어서 멘토링때 자세히 설명드리겠습니다. 결론은 완벽한 해결방법이 없을 때 어떤 기준으로 코드를 작성해야할까요?
-
jwt를 현업에서는 어떤 정책으로 사용하고 계신지 궁금합니다.
-
OAuth 2.0에서 회원가입을 어떻게 처리 할지 고민이 있었는데 현업에서 어떤식으로 처리하시는지 궁금합니다.
멘토링 시간에 나눈 이야기를 기록해보세요.