코드스테이츠 백엔드 | 섹션2 회고

hyoreal·2022년 8월 18일
1

CodeStates

목록 보기
26/32

이건 말도안된다. 섹션1이 엊그제 끝난거같은데 벌써 섹션2가 끝났다구....??? 벌써 절반 지났다구...?????? 나는 아직 절반의 반도 못따라온거같은데 믿을 수 없다...
나는 아직 코린이에 머물러있지만 진도는 나를 기다려주지않는다.


섹션2에 들어서고 스프링을 시작하면서부터 내용 이해하는데 바빠서 블로깅도 밀리고있었다.

섹션2 들어서면 더 바빠진다하시더니 정말이었다.
이해하기 바빠 책 볼 시간도 없고 정말.. 비전공자에겐 힘든 스케줄이지만 그래도 여전히 재밌게 잘 임하고 있는것같다!!
DI와 AOP 블로깅은 이번주 내로 끝낼 예정이다.
최대한 이해하고 올리고싶어 조금씩 밀리고 있지만 나 스스로에게 양해를 바란다.


이번 질문들은 모두 꽤나 난이도가 있기에 내가 어떤 질문을 그나마 더 자신있게 이야기할 수 있을지 고민하다보니 시간이 꽤 걸렸다.
고민이 거듭된 결과로 이번 기술면접은 Primary key/ Foreign Key, IoC, DI에 관한 질문을 선택했다.

  1. Foreign Key와 Primary Key에 대해 설명하세요
  • 관계형 데이터베이스에서 데이터를 구분하기 위한 여러가지의 key에서의 primary key와 foreign key는 각각 기본키와 외래키이다.
    Primary Key는 값이 중복되지 않고, 비어있지 않은 여러 후보키들 중 하나를 대표로 지정하는 키를 말하며 한 테이블당 하나의 primary key를 가질 수 있다.
    Foreign Key는 다른 테이블에서 Primary Key를 참조하는 속성을 말하는데, Foreign key는 Primary Key와 값의 종류, 값의 범위가 같아야한다.
    하지만 primary key와 달리 중복되는 값과 비어있는 값이 허용된다.
  1. IoC에 대해 설명하세요
  • IoC는 제어의 역전을 말하는데, 기본적인 자바에서의 개발을 할때에는 개발자가 직접 객체를 생성하고, 수정하고, 삭제 등을 하며 애플리케이션의 제어권을 개발자가 갖고있지만 스프링 프레임워크에서는 객체 생성, 추가, 수정, 삭제 등의 기능을 프레임워크가 대신 해주기에 애플리케이션의 제어권은 프레임워크에게 있다. 이 경우를 제어의 역전이라고 하며 IoC라고 한다.
  1. DI에 대한 설명과 해당 기능의 장점에 대해 설명하세요
  • DI는 의존관계주입을 말하는데 먼저 의존관계란 A코드에 의존하고 있는 B코드가 있을 때, A코드가 수정되게 되면 B코드에도 영향을 미치는것을 말한다.
    하지만 DI없이 객체가 서로 의존하게되면 A코드가 수정될때마다 그 밑의 의존하고있는 코드들도 계속 수정해야하기 때문에 코드의 유지보수성이 떨어진다.
    이 단점을 보안하는것이 DI이다.
    DI는 의존관계를 외부에서 결정하고 주입하는데, 인터페이스로 추상화한 객체를 주입받고 구현하여 사용하게되는데 이를 통해 각 객체끼리의 의존성과 결합성이 낮아지게되고 결국 유지보수하는데에 유용해진다. 유지보수성이 좋을수록 코드의 재사용성도높아지며 가독성까지 좋아지게된다.

(꼬리질문) DI와 IoC의 차이?

  • DI와 IoC의 차이점이라고 하면 IoC 안에 DI가 속한다고 볼 수 있다.
    DI는 객체간의 약한 결합을 통해 의존관계를 쉽게 변경할 수 있는 유연한 코드를 만드는데 도와주는데 이 DI의 기능을 IoC, 즉 제어의 역전을 통해 스프링 프레임워크가 해주는 것이다.

어떤 답을 했는지에 대해 정확히 기억나진 않지만 위와 비슷하게 답했던것같다.
Primary key와 Foreign key는 저번 페어시간에 페어분께서 정말 친절하고 세세히 설명해주신 덕분에 그나마 쉽게 대답할 수 있었지만 IoC와 DI에서의 어려움이 컸다.
나 혼자는 알고 있지만 입 밖으로 설명하려고 하니 어떤 식으로 설명해야할지 모르겠어서 이 말, 저 말 뱉다보니 내가 무슨 말을 하고있는건지도 모를정도였던거같다.

이래서 엔지니어님들이 내 언어로 만드는게 가장 중요하다고 집어주셨구나, 하고 정말 뼈저리게 느꼈다.


아무래도 나도 모르게 자만이 있던것같다.
'이 정도 이해했으니 됐어.' 라는 자만이 결국 아무것도 모르는 사람과 다름이 없는, 아니 더 좋지 않은 모습을 보인것같아 마음이 정말 안좋다.

주변 지인들은 내가 공부하는 모습을 보고는

너 되게 열심히하더라. 공부 진짜 많이 하나봐.

라고 했지만 아니었던거다.

공부는 보여주기위해 하는 것이 아니라 내가 이 정보들을 내것으로 만들기 위해 하는것이지만 여태까지의 나는 '주변에서 이렇게 칭찬할정도면 열심히 하는거 맞겠지.' 라는 안일한 생각으로 공부에 임한거다.

또다시 나에게 실망하고 말았다.
겨우 이런 마음으로 시작한게 아닌데 개발을, 코딩을 공부하는게 재밌어서 시작한건데, 누구보다 열심히 하겠다며 시작한것이었지만 자꾸 이런식으로 망가지는것같다.

이런 자만을 정말 버려야한다.

내가 이해하지 못했다면 공부하지 않은것과 같다.

이 생각을 항상 되뇌이고 되뇌이며 공부하려고 한다.

그렇기에 이젠 다른 방법으로 블로깅을 해보려고 한다.
현재 내 블로그는 원하는 정보를 찾기에 부적합하다는 생각이 들었다.
과연 미래의 내가 이 블로그를 보고 원하는 정보를 찾을수 있을까 라는 회의감이 들었고 다른 방법으로 블로깅을 해야겠다는 생각이 들었다.
보다 체계적이고 깔끔하게, 공통사가 있는 내용끼리 모아두는 등의 방식으로 정리를 해볼까 한다.

블로깅도 공부도 이렇게까지 꾸준히 하는건 내 삶에서 처음이라고 볼 수 있다.
그렇기에 어떤 방법이 좋을지 끊임없이 찾아나가야하기에 많은 변동이 있어도 이해바란다.
이 모든 과정이 내가 더 나은 개발자가 되기 위한 과정이기에 모두 소중하게 생각한다.


이번 섹션2에서는 알고리즘, 자료구조, 코딩테스트 준비, 네트워크, 데이터베이스, 스프링 프레임워크 를 배웠다.
저번 섹션1때에는 독학했던 자바스크립트와 유사한 부분들이 있다고 느껴졌기에 보다 쉽게 이해했었지만 섹션2부터는 정말 처음 보는 내용들이다보니 따라가는데 참 벅찼다.
추가로 공부해야한다고 느껴졌기에 책을 많이 구매했지만 지금의 내가 이해하기에는 어려운 수준의 책들이 많았지만 그래도 조금씩 해나가는 중이다.

섹션2는 보다 이론적인 공부가 많았다면 섹션3부터는 본격적인 실습이 자주 있을거라고 들었다.
지금은 이해하지 못한 부분들도 실습하다보면 더 이해가 잘 될것같은 마음에 기대하는 중이다.

부디 앞으로는 스스로에게 실망하지 않게끔 더 열심히 공부해서 앞으로 계속 나아갈 수 있기를 바라는 마음으로 다음을 향해 나아갈 준비를 한다.

진정한 개발자로 거듭나기 위한 코린이의 발돋움.

profile
좌충우돌 코린이 성장기

0개의 댓글