본문 바로가기

전체 글

(147)
부트캠프 89일차 후기 이제 부트캠프도 막바지다. 내일이면 프로젝트 기간이 끝나고, 이력서 기간이 시작된다. 부트캠프를 수료하기 위해 오늘은 AWS 강의를 들었다. 여기서, 기억에 남는 것은 Elastic Load Balancer에 관한 것이다. Elastic Load Balancer(이하 ELB)는 AWS에서 제공하는 로드 밸런싱 서비스이다. 로드 밸련싱은 애플리케이션을 최적화하하기 위해서, 여러 서버에 네트워크 트래픽을 분산하는 것을 의미한다. AWS는 EC2라는 IaaS 클라우드 서비스를 제공하는데, 이 EC2 인스턴스 여러개를 통해, 트래픽을 분산시켜서, 애플리케이션 가용성을 최적화한다. 여기서, IaaS란 하드웨어 인프라를 인터넷을 통해 제공하는 서비스를 의미한다. 쉽게 말해 인터넷 상의 컴퓨터이다. 이 ELB는 다양..
부트캠프 88일차 후기 오늘은 튜터님들에게 내 코드리뷰를 부탁드렸다. 그 중 Readme를 작성을 추천하신 튜터님이 계셔서, Readme를 작성하였는데, 생각보다 적기가 힘들었다. 이전 프로젝트와의 차이점 중심으로 적었는데, 이 때, "서버 사이드 렌더링" 방식의 기존 프로젝트를 "클라이언트 사이드 렌더링"으로 바꾼 것을 어떻게 더 효과적으로 나타낼 지 고민했고, 내가 이 2가지의 차이점을 제대로 모른다는 것을 깨달았다. 그래서 이번엔 이 2가지의 차이점을 정리하고자 한다. 우선 브라우저 렌더링에 대해 이야기하자 "브라우저 렌더링"은 브라우저가 서버로부터 요청해 받은 내용을 브라우저 화면에 표시하는 작업을 의미한다. 이 렌더링 방식을 서버에서 하나, 아니면 클라이언트(브라우저) 에서 하는지 차이가 위의 두 방식으로 나뉘어진다...
부트캠프 87일차 후기 오늘로 어느정도 개인프로젝트를 완성했다. 다소 버그가 있고 미흡한 점이 있지만, 내일 다소 보강을 하면 완성이다. 지금까지 무시해 온 자잘한 버그를 수정했는데, 기억에 남는 것은 ZoneDateTime을 javascript에서 사용하는 것을 찾는 것이였다.LocalDateTime을 attribute로 사용하자니, 이전에 알아냈듯 정확한 시간을 얻기 힘들 것 같아서 고민을 했었는데, Response로 리턴할 때, LocalDateTime으로 바꾸는 좋은 방법을 떠올렸고, 다행히, 정상적으로 작동했다. 또 다른 것은 @ElementCollection의 사용이다. Like를 표시하기 위해서, 중복 방지를 위해서 자료구조를 사용했다. 처음엔 Set을 사용했는데, 어차피 중복 사용을 미리 확인을 해볼거고, Set..
부트캠프 86일차 후기 이제 프로젝트 기간도 얼마 안 남았다. 최종 프로젝트 종료와 함께 Intellij 유료판 유효기간도 지나니까 최대한 빠르게 프로젝트를 마칠려고 한다. 이번은 유효값을 바로 프론트에 바로 보여주려는 기능을 구현하려 했다. 하지만, 이전 프로젝트의 코드를 보니 코드가 좀 지저분하고, 뼈대는 비슷한데 반복되고, 확장성면에서도 좋아보이진 않았다. isAvailableNickname(nickname).then( result =>{ let info = "" if(result == 0) { nicknameChecked = true } else { nicknameChecked = false if(result < 0) info = "Nickname Must be longer than 3 and less than 20 a..
부트캠프 85일차 후기 드디어 프론트엔드 작업을 마쳤다. 생각 외로 많은 시간이 걸려버렸지만 겨우 작업을 마쳤다. 이 자바스크립트란 언어는 매우 널럴한 언어인데, 함수에 변수 갯수를 잘못넣어도 나머지 변수를 undefined로 채우기에, IDE 내에서의 오류 검출이 다른 언어에 비해 개인적으로 힘든 것 같다.. 프론트엔드를 고르지 않은 것은 좋은 선택이였던 것 같다. 오늘 모의면접을 보았는데, 얘기를 나누다 보니 디자인 패턴에 대한 이야기가 나왔다. 디자인 패턴에는 많은 패턴이 있어서(옵저버 패턴, 템플릿 메소드 패턴, 체인 패턴, 프록시 패턴 등등) 다 다루지는 않을 것이고, 면접에서 나온 커맨드 패턴과 전략 패턴과 차이점에 대해 간략하게 정리를 해볼려고 한다. 전략 패턴은 전략 행위를 클래스화하고, 인터페이스를 정의한 뒤에..
부트캠프 84일차 후기 이제 내일이면 프론트엔드 작업을 마칠 수 있을 것 같다. 이 지긋지긋한 javascript와의 씨름을 끝내고 다음 주부터는 부가기능 디버깅과 백엔드 보강에 몰입하고 싶다. 쉼 없이 달리느라 의아한 버그를 만나기도 했는데, 분명 localStorage에 있는 jwt를 서버에게 건냈음에도, 로그인이 안 된 상태로 접근하는 버그를 맞닥들이기도 했다. 처음에는 내가 수정하고 있는 부분의 버그인가 싶어서 관련 부분을 수정을 했음에도, 로그인이 안된 것이였다. 혹시 몰라서 다른 로그인 시스템을 살펴보니 이전에 로그인 상태로 동작하던 코드도 비로그인 상태로 동작했다. 이것을 보고 이 버그의 정체를 깨달았는데, 사실 버그가 아니였다. 내가 jwt의 만료 시간을 3시간으로 잡아두어서, jwt가 만료된 것이다. 이런 어이..
부트캠프 83일차 후기 지금까진 쉬엄쉬엄했지만, 오늘은 아침부터 코드를 짜느라 바빴다. 역시, 배우지 않은 javascript를 건들이는 것은 고역이다. 어이없는 오류를 맞닥들이기도 했는데, axios를 통해 얻은 데이터를 제대로 못 얻는 오류가 발생했었다. 이 오류는 내가 비동기 함수를 마치 일반 함수처럼 사용해서 발생한 오류인데, 이 오류를 간단하게 나마 이야기해보자. 비동기 함수는 비동기적으로 작동하기 때문에, 비동기 함수가 실행 중임에도 계속해서 다음 줄이 실행된다. 기다리기 위해선 await를 앞에 붙여야하는데, 나는 이것을 간과해서, 결과를 제대로 얻지 못했다. 다시 말해 await 붙이는 것을 깜빡해서, 오류가 발생했었다. async function getGallery(galleryId) { let result =..
부트캠프 82일차 후기 이전 프로젝트에서는 로그인 방식이 formLogin 방식을 사용했는데, 이번에는 Rest-API를 더 적극적으로 사용할 수 있는 방법을 고민하였다. 내가 만든 이 애플리케이션은 JWT 방식을 사용한다. 이 방식은 서버에 로그인한 클라이언트를 저장하는 것이 아니라, 클라이언트 측에서 API를 요청할 때마다, HTTP의 Header에 Authorization 속성을 추가해서 JWT를 넣는 방식이다. 즉, 서버에서 발급받은 토큰을 클라이언트, 즉, 프론트엔드에 저장을 해야한다. 그런데, 나는 프론트엔드를 잘 몰라서 이것을 어떻게 해결해야할 지 많이 고민을 하였다. 프론트엔드 측에서 정보를 저장하는 방법에 두 가지를 고민했어야 했다. 첫 번재는 LocalStorage에 저장하는 방법이고, 두 번째는 Cookie..