TIL

220811 TIL & 모의 면접 예상 질문

Vince_rf 2022. 8. 11. 14:20

개발자가 되고 싶은 이유
저는 무언가를 이루어 냈다는 가시적인 결과를 항상 갈망하고 있습니다. 또한 타인들에게 제 자신이
전문적인 방면에서 인정받는 것을 중요하게 생각합니다. 그리고 이런 저의 가치관에 가장 부합하며,
노력 여하에 따라 성장과 성과를 충족시켜 줄 수 있는 직업이 개발자라고 생각했습니다. 끝없이 공부
하고 공부한만큼 인정받으며, 가시적인 결과를 낼 수 있을 뿐만 아니라 전문성을 갖춘 인재로 인정받
을 수 있다는 생각이 들었습니다. 저는 즉시 항해99에 지원하였고 아직은 부족하지만 몇 개의 프로젝
트를 끝내고 발전해가는 제 모습에서 다시 미래에 도전하고 발전을 지속할 수 있는 활력을, 또한 동기
를 얻어내고 있습니다. 

강점 3가지
저의 강점은 새로운 발전을 항상 갈망하고, 두려워하지 않는 점입니다. 저는 타인의 시선을 지나칠
정도로 의식합니다. 그래서 항상 타인과 저를 비교하고 타인이 저를 인정하는 것을 원하고 타인보다
더 빠르고 효율적으로 발전하기를 원합니다. 또한 이를 위해서 제가 접할 새로운 도전이나 미래에 대
한 불안을 두려워하지 않습니다. 이 강점은 저를 끊임없이 공부하고 연구하며 성장하는 개발자로 이끌
어줄 것이라 믿어 의심치 않고 있습니다. 또 하나의 강점은 새로운 환경에 잘 적응하고 의사소통과 주
변사람과의 관계를 중요하게 생각한다는 점입니다. 저는 항상 발전하며 인정받는 사람이 되기를 원하
지만, 제 한계를 명확히 인지하여 협업을 중요하게 생각하고 이를 위해 타인과 선한 영향을 주고받을
수 있는 경쟁관계를 지향합니다. 실제로 항해99를 진행하며, 타인에게 제 트러블슈팅을 공유하고 피드
백을 받고 반대로 상대방의 트러블슈팅에 대한 설명을 듣고 피드백을 남기는 것이 성장에 큰 공헌을
했습니다. 그러므로 이 강점은 제가 타인과 유연하게 협업하는 동시에 성장에 대한 열망과 큰 시너지
효과를 발생시킬 수 있을 것입니다.
마지막 강점은 자기관리에 자신이 있다는 점입니다. 이 강점은 언뜻 개발과 큰 연관이 없어보이지만,
사실 개발뿐만이 아니라 삶의 전체적인 부분에서 가장 큰 영향을 미치는 영역이라고 생각합니다.
항해99에서 프로젝트를 진행할때도, 그 날의 기분에 따라 작업의 진행도가 전혀 다름을 파악했습니다.
그리고 저는 이런 사태가 발생했을 때, 효과적으로 기분을 전환시킬 수 있는 방법을 잘 숙지하고 있습니다.
적당한 운동역시 제가 지치지 않고 계속해서 나아갈 수 있는 밑거름으로 작용하고 있습니다.

3/6/9 성장계획
향후 3개월은 항해99에서 진행했던 실전프로젝트에서 아쉬웠던 부분을 중점적으로 공부해보고 싶습니다.
특히, 서버 성능 측정과 테스트코드에 대한 조언을 많이 들었었지만, 결국 구현해내는데 실패하였기 때문에
이 부분에 대해서 확실히 학습하고 싶습니다.
아울러 기본적인 CS지식에 대한 학습을 병행하고 싶습니다. 제가 CRUD의 성장에 가장 박차가 가해졌던
시기가 바로 스프링의 동작원리를 조금이나마 파악하기 시작한 시기였기 때문입니다. 솔직히 신입 개발자,
그것도 개발 경험이 3개월밖에 되지 않는 제 입장에서 CS공부를 하는 것이 맞나? 주특기에 훨씬 더 집중해야
할 시기가 아닐까? 라는 망설임이 있지만, 결국 제가 공부한 지식은 언젠가 돌고 돌아서 저를 성장시킬 수
있을 것이라고 믿어 의심치 않습니다.
또 솔직하게 말씀드리자면, 6개월과 1년의 향후 계획은 구체적으로 잡혀있지 않습니다. 제가 항해99에서 매
주차 새로운 과제들을 해결하면서 느꼈던 점은, 성장은 결국 배웠던 기술들에 충실하며, 그 기술들을 점차
심화시켜나가는 과정이라는 것입니다. 비록 무엇을 명확히 어떻게 해야할 지는 지금 시점에서 100% 자신감에
차서 무조건 지킬 수 있다! 수준의 확답하기 어려우나, 포기하지 않고 꾸준히, 천천히 가더라도 확실히 성장
하는 것을 목표로 삼고있다는 점은 자신있게 확답드릴 수 있습니다.

스프링이란
자바의 웹 프레임워크로서 자바로 다양한 어플리케이션을 만들기 위한 프로그래밍 툴입니다. 다른 사람의
코드를 참조하기 쉽고 편리한 구조로 제공하는 오픈소스 프레임워크 이다. 특징으로는 IoC(제어반전){제어권
이 개발자가 아닌 IoC에 있으며객체의 생성부터 소멸까지 개발자가 아닌 스프링컨테이너가 대신 해주는 것
이다}과 DI(의존성주입){대표적으로 라이브러리나 API, 프레임워크를 연동 할 때 연결하는 소스코드를 직접 
작성하는게 아닌 외부 파일을 연결해 불러오는 방식이며 이는 코드 간의 재사용을 높이고, 소스코드를 다양한
 곳에 사용하며 모듈 간의 결합도를 낮출 수 있다.}를 꼽을 수 있습니다.

실전프로젝트 기술적 어려움
CRUD를 하는 과정에서 테이블간의 연관관계를 구상하는 단계에서 큰 어려움을 겪었습니다. 저희의 프로젝
트는 화상으로 진행하는 회의서비스입니다. 그렇기에 팀이 있고 팀에 여러명의 유저가 속해있으며, 또 이와
반대로 유저 한 명이 복수의 팀에 가입되어 있는 연관관계를 구현해야 했습니다. 처음에는 ManyToMany를
이용해서 객체를 리스트로 담으려고 했으나, 구글링을 진행한 결과, ManyToMany은 단순한 테이블매핑으로
사용하는 것은 큰 문제가 없으나, 실무단계에서 중간테이블이 전자와 같은 역할 이외에도, 여러가지 컬럼을
가져야하는 경우가 있을 수 있다. 예를 들어 팀에 속한 유저 정보가 갱신된 시간이라던지하는 정보들이 포함
되는 경우가 있기에 ManyToMany를 추천하지 않고 있었습니다. 그래서 찾아낸 대안이, Team 테이블과 User
테이블 간에 연관관계를 맺어주기 위해서 TeamUser라는 가상의 테이블을 만들어 Team과 User에서는 
OneToMany, TeamUser에서는 각 Team과 User에 대해서 ManyToOne를 설정해주는 것이었습니다.
이 솔루션은 성공적이었고 새로운 도전에 대해 성공했다는 자신감을 가져다주었을 뿐만 아니라, 프로젝트를
진행하면서 다시 같은 문제가 등장했을 때 어려움없이, 빠르게 해결할 수 있었습니다.

최근 공부했던 주제 중에 가장 자신있게 설명할 수 있는 것
최근 웹소켓으로 채팅기능을 구현하기 위해서 Redis에 대해 공부를 진행했기에 Redis에 대해서 말씀드리겠
습니다. Redis는 인메모리 데이터 구조 저장소로, 데이터베이스, 캐시, 메시지 브로커로 사용한다고 말합니다.
여기서 인메모리란 컴퓨터의 RAM에 데이터를 올려서 사용하는 방법을 말한다. 이유는 명확하게도 속도 때문
이며,  SSD,HDD 같은 저장공간에서 데이터를 가져오는 것보다 RAM에 올려진 데이터를 가져오는데 걸리는
 속도가 수백배(HDD 기준) 이상 빠르다. 때문에 Redis는 빠른 속도가 큰 장점이다. 또한 Key-Value 형태의
(key 하나당 value를 저장하는 형태) 
NoSQL이라는 점이 특징이다. redis가 다양한 형태의 데이터 구조를 지원하기는 하지만 복잡한 데이터를 
저장하는 데이터베이스로 사용하기에는 어려움이 있다. 이러한 redis의 장단점을 고려했을 때 가장 적합한
역할은 캐시 데이터베이스 서버이다. 예를 들어, 게임의 랭킹 상위 100위를 보여주는 기능이 있다고 해보자.
랭킹 정보를 사용자에게 제공하기 위해 관계형 데이터베이스에 랭킹 정보를 저장을 하고 order by 로 불러올
수 있다. 그런데 사용자 수가 폭발적으로 증가해 수백만명으로 늘어나게 되면 보여주는건 100명의 데이터뿐
이지만 시간이 점점 오래 걸리게 될 것이다. 이러한 문제를 해결하기 위해 캐시에 상위 100명의 랭킹정보를
 담고 있다면 좋은 해결책이 될 것이다.


jpa란
자바의 ORM을 위한 표준 기술입니다. 여기서 ORM이란 자바의 객체와 관계형 DB를 맵핑하는 것으로 DB의 
특정테이블이 자바의 객체로 맵핑되어 SQL문을 일일이 작성하지 않고 객체로 구현할 수 있도록 하는 프레임
워크입니다. 
SQL 위주의 Mybatis 프로젝트와 비교하여 쿼리를 하나하나 작성할 필요도 없어 코드량이 엄청나게 줄어듭
니다. 또한 객체 위주로 코드가 작성되다 보니 가독성도 좋고, 여러 가지 요구사항으로 기능 수정이 발생해도
 DB부터 더 간편하게 수정이 가능합니다. 그리고 RDBMS마다 사용법이 다른 경우가 많은데 이런 부분을 
JPA가 알아서 내부적으로 처리하기 때문에 기존에 RDBMS에 종족 적이던 애플리케이션에서 벗어날 수 있다.
즉, Sql을 개발자가 작성할 필요없이 JPA를 통해 맡기고 싶을 때, Sql에 의존적이지 않고 테이블의 변경이 발
생해도 수정해야할 코드를 줄이고 싶을 때 사용한다고 생각합니다.

'TIL' 카테고리의 다른 글

220913 TIL io 도메인은 대체 뭘까? 라는 의문에서 시작된 검색  (0) 2022.09.13
220911 TIL  (0) 2022.09.13
TIL 220810  (0) 2022.08.11
TIL 220807  (0) 2022.08.11
TIL 220805  (0) 2022.08.11