20210314-TIL

나영원·2021년 3월 14일
0

T.I.L.

목록 보기
120/145

오늘 할일

  • 개인프로젝트 준비
  • 알고리즘 문제풀기
  • 기술면접 준비

오늘 한 것 & 배운 내용

채용공고 읽기

  • 채용공고를 자꾸 보다보니 해당 회사가 어떤 회사인지 보다는 회사에서 요구하는 것이 무엇인지에 초점을 맞추어서 자꾸 보게 되는데 물론 그것도 중요하지만 내가 어떤회사와 서비스에 관심이 있는지 알아가는 것도 중요한 과정인 것 같다

    • 다양한 채용공고를 보며 어떤 분야에 관심이 가는지 정리해보는 것도 좋을 것 같고 해당 분야에 대한 정보도 미리 알아간다면 면접에도 도움이 많이 될 것 같다
  • 신입에 경우 확실히 채용 과정에 과제를 내주는 경우가 많은 것 같다.

    • 개인 프로젝트는 포트폴리오용 뿐만 아니라 실력향상을 위해 필수라는 것을 다시 느꼈다
  • 마음에 드는 기업이 있어서 잡플래닛을 살펴보면 평이 그렇게 좋은 기업이 별로 없다. 내가 살펴보는 기업이 대부분 스타트업이기 때문에 공통적으로 나오는 문제점들이 있는 것 같다. 이건 당연한거니까 받아들여야 하는것이고 정말 이것만 피해야 될것 같다라는 크리티컬한 문제점들을 찾아내는 눈을 기르면 더 도움이 될 것 같다

  • 소비자 데이터 관련기업에 공고를 보는데 들어본적이 없는 기업임에도 불구하고 굉장히 관심이 많이 생기고 가고싶은 마음이 생겼다

    • 소비자 데이터쪽으로 관심이 많다는 것을 느꼈고 비슷한 곳으로 더 찾아보면 좋을 것 같다

개인프로젝트 준비

  • 로그인 부분에 구글 로그인을 Oauth를 이용해 구혆하지 못한것이 아쉬워서 이번 개인프로젝트에도 소셜로그인 기능을 넣을 계획이다

    • 그것을 위해서 오늘 새로운 예제를 한번 Oauth를 이용한 구글로그인 예제를 한번 해봐야 될 것 같다
  • 검색해보니 구글 로그인을 위한 예제는 생각보다 많았다.. 프로젝트에서는 JWT 까지 한번에 활용한 예제들을 찾다보니 찾기가 어려웠던 것같다

    • 다음부터는 몇개의 기술을 합쳐서 알아보는 것보다는 각각의 기술을 알아보고 어떻게 연결하는지 알아보는게 더 빠른 방법이 될것 같다
    • 이미 JWT는 활용해봤으니 구글로그인 예제를 몇개 해보고 어떻게 이위에 JWT를 적용할지 찾아보면 답이 나올것 같다
  • 예제 따라하기

    • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스라는 책을 따라한 예제가 있어서 로그인 부분만 보는것보다 더도움이 될것 같아서 간단한 웹서비스 구현하는 예제를 따라가면서 구글로그인까지 해보는 것으로 결정하였다

    • 구글로그인까지 가는 길목에 JPA에 대한 짧막한 설명과 ORM에대한 짤막한 설명이 있었는데 기술 면접을 위해 이정도는 알고 있어야 되지 않나 싶다

      • MyBatis, IBatis는 ORM이 아니고 SQL Mapper라는 차이점을 알아두는 것도 좋을 것 같다
    • 예제를 따라하다보니 사용하는 테스트의 종류가 강의에서배운것과는 조금 달랐다(mockmvc를 Repository에서 사용하고 ControllerTest를 Restemplate으로 하는등)

      • 테스트는 다양한 방법이 있고 개발자에 따라 필요하다고 생각하는 테스트를 사용하는 것임을 다시한번 생각하게 된다
      • 내가 어디에 어떤테스트를 사용하는지 왜사용하는지를 명확히 해두는게 좋을 것 같다
    • 주객이 전도된 것 같지만 예제에서 배울것들이 많아서 너무 재미있게 예제를 실습하였다

      • 배운점을 정리해보면

        • Intellijd에서 프로젝트를 만든뒤 바로 share project on github까지 만들어주면 .ignore까지 깔끔하게 설정해서 만들어준다는점
          • 지금까지 해온 방법중에 가장 깔끔한 방법이었음
        • Dto를 API 별로 만들고 해당 Dto에 .toEntity메소드를 넣어서 바로 Entity객체로 만드는 방식
        • 설정을 통해서 H2DB의 쿼리 동작을 MySql처럼 할 수 있다는 것
          • 테스트 DB에 쿼리를 체크할 때 Msql환경에서처럼 작동시켜준다는 장점이 이는 것 같음
        • update를 .save를 통해서 하지 않고 바로 객체만 변경해주면 Transaction 안에서 인식을해서 자동으로 update해주는 것
        • Auditing을 통해서 자동으로 CreateDAte 뿐아니라 ModifiedDate까지 정해줄수 있는 것
          • @MappedSuperclass를 통해 심지어 따로따로 Colum을 만드는게 아니라 상속을 통해서 한번에 만들수 있는것
      • 생각보다 시간이 올래걸려서 오늘은 Auditing까지만 진행을 하고 내일 Social Login 부분을 추가로 실습하면 될 것 같다

  • 개인프로젝트에 대한 내용을 따로 정리하면 좋겠다 생각하고 있다가 오픈카톡에서 아이디어를 얻어서 Notion에 정리하기로했다

    • 기존 프로젝트에서도 계속 사용해왔는데 혼자서는 잘사용을 안해서 잊고 있었는데 좋은 아이디어인 것 같다
    • 노션링크

알고리즘 문제 풀이

  • 다이얼
    • 풀이-18분
      • String number = {ABC, DEF ..} 같은 배열을 만들어 해당 글자가 몇번째 인덱스에 속했는데 .contains 메소드를 통해서 알아낸 뒤 그값들을 더해주는 방식으로 풀었다
      • 333434 같이 불규칙적으로 이루어져있었기 때문에 char로 만들어서 숫자를 활용하기가 부담스러워서 이런방식으로 풀었다
    • 다른풀이
      • 나와 비슷하지만 Switch ~ Case문을 통해 가독성을 올려서 푼 사람들도 있었다
        • 일반 배열보다는 확실히 가독성이 좋은 것 같아 하드코딩 비슷하게 짜인다면 Switch~case로 푸는것도 괜찮을 것 같다
      • 물론 불규칙한 것들 또한 규칙성을 가지게해서 숫자로 푼 사람들도 있었다
        • 이런경우는 나의 경우 너무 오래걸릴것 같아서 안했는데 연습할때 해봤으면 좋았을 것 같다
  • 블랙잭
    • 풀이 - 24분
      • 문제를 읽고 3개의 숫자를 겹치지 않는 로직 + 값을 비교하여 M과 비슷한 값을 찾아내는 로직으로 구분하였다
        • 3개의 숫자를 어떻게 안겹치게 더할까 고민하다가 안풀려서 답답해 하던차에 중첩 for문에 i+1해서 배열의 값들을 넣어줬던게 생각나서 3중 for문으로 3개의 숫자를 겹치지 않게 더할수 있도록 구현하였다
        • 겹치지 않는 로직은 더한값sum이 answer < sum <= M으로 해두면 쉽게 구현할 수 있었다
      • 알고리즘 유형이 브루트 포스라고 적혀있었는데 찾아보니 완전탐색 알고리즘이라고 한다
        • 가능한 모든 경우의 수를 모두 탐색하면서 요구 조건에 충족되는 결과를 찾는 알고리즘을 뜻하나보다
      • 어렵게 느껴졌는데 다행히 이전에 풀었던 유형을 기억해내서 푼케이스라 자신감을 조금 얻을 수 있었다
    • 다른사람 풀이
      • 대부분 비슷하게 풀었고 break문에서 label을 줘서 최상단 for문을 빠져나가게 하는 디테일함이 있었다
        • sum은 최하단 for문에서만 일어나기 때문에 결과는 상관없지만 불필요한 연산을 줄여준다는 점에서 장점이 있는 것 같다
          • 충격적인 결과는 실제로 돌려보니 label이 있는 break문이 더 시간이 오래걸리게 나왔다(이전 80ms 이후 84ms)

기술면접 준비

  • Java의 특징

    • 거의 초반에 배웠던 내용이라 이해가 잘 가지 않았던 내용들이 어느정도 배우고 다시 배우니 어느정도 수준에서 이해도 가고 사용해본것도 있어서 기분이 좋았다
    • 이후에는 JVM과 가비지 컬렉터, 객체지향의 특징 등으로 확장해가면서 정리해 나가면 좋을 것 같다
  • 프로젝트 까지 계속 구현위주로 공부를하다가 이론 공부는 오랜만에 하는것이라 그런지 생각보다 집중이 잘안된다

    • 아무리 다른것 다 잘해도 몇시간동안 진행되는 기술면접에서 떨어지면 의미가 없다는 것 기억하고 집중력을 올려야될 것 같다

내일 할일

  • 채용공고 읽기
  • 개인프로젝트 준비
  • 알고리즘 문제풀기
  • 기술면접 준비
profile
배우는 개발 일기

0개의 댓글