WeeklyReview - 8월 2주차

목차

  • 한 주간 무엇을 했는가

  • 무엇을 읽었는가

  • 무엇을 보았는가

  • 그래서 이번 한주동안 무엇을 배웠는가


    What I did in this week.

    지난주 실전 면접 피드백을 받았다. 자신감있게 대답한 부분은 좋았지만 기술면접에 대해 조금 더 준비하라는 피드백을 받았다. 면접 때 *”static과 void에 대해 설명하시오.”*라는 질문에 어이없게 반만 대답을 했다. 긴장을 안한다고 생각했는데 막상 면접 중반부터 긴장을 해서인지 static에 대해서는 *”static은 자주 사용하는 객체를 메모리에 미리 할당해놓고, 인스턴스 생성없이 사용할수 있도록 할당하는 것”*라고 대답해놓고 void는 모른다고 대답했다.

    첫 인터뷰인걸 감안하고 앞으로 이를 바탕으로 준비를 더 잘해야겠다. 아무튼 생각한것보다는 면접관이 잘봐줘서인지 2차 면접을 제안받았고, 응하기로 결정했다. 실전 면접때 질문을 하지 못해서 2차 면접에서는 질문도 하고 싶다. 결과와 상관없이 이런 면접 경험이 향후 구직에 도움이 될 것으로 기대한다.

    항상 도움을 받고있는 ios개발자 동건님으로부터 스프링러너 Mastering Spring Web 101 Workshop 라는 워크샵을 추천받았다. 이틀간 스프링 부트를 학습하는 기회인데, 교육비용이 30만원이라 부담스러웠는데 얼리버드는 50%할인이라고 해서 일단 결제했다. 좋은 기회라고 생각했는데 잘 따라갈수 있을지 걱정이 드는것도 사실이다. 과정 마치는대로 부족한 부분을 채우면서 준비해야겠다.


    What I read in this week.

    프로젝트가 막바지에 치닫는 가운데 본격적인 구직준비도 해야해서 시간날때마다 기술면접 대비해서 글을 읽곤 하는데 최근에 이를 준비할 수 있는 최고의 글을 알게 되었다. 트위터에서 팔로우하고 있는 삐멜님이 정리해주신 글인데 나처럼 비전공자들에게 더 없이 좋은 자료라고 생각된다.

    구직하면서 다 학습하지 못하더라도 최소한 자료구조/네트워크/데이터베이스만이라도 이해하고 준비할 수 있도록 해야겠다.


    What I watched in this week.


  • 노마드코더 - yes, python is slower than C.

    파이썬이 C언어보다 느린 이유라고 제목을 달았지만, 영상의 내용은 **인터프리팅 언어(Interpretation)**와 **컴파일러 언어(Compilation)**의 차이를 설명해주는 영상이다.

    영상만의 내용으로는 정리하기에 부족할 것 같아 삐멜님의 블로그 포스트를 참고하여 정리

    정리하면 다음과 같다.

    번역기란 개발자가 작성한 프로그래밍 언어를 기계어로 번역하는 것을 말하는데 JDK(Java), Python(Python), gcc(C) 등이 여기에 해당한다.

    인터프리팅 방식으로 구동되는 언어를 스크립트 언어라고 하는데, Python, Javascript, Php가 대표적인 스크립트 언어이다. 컴파일러로 구동되는 언어는 Java와 C가 있다.

    기계어로 번역하는 방식에 따라 인터프리터와 컴파일러로 나뉘는데 둘의 차이는 다음과 같다.

    1. 인터프리터는 코드를 line by line으로, 실시간으로 기계어로 번역한다. 코드를 실행할때마다 번역하는 특징이 있다.
    2. 컴파일러는 최초 번역시에 전체 코드를 번역해서 하나의 바이너리 코드를 만들어낸다. 이후부터는 코드를 번역할 필요없이 생성된 바이너리 코드를 실행한다.
    3. 코드를 실행할때마다 번역을 해야하는 인터프리터와 비교해서 바이너리 코드를 실행하는 컴파일러의 실행속도가 상대적으로 빠르다는 장점이 있으며, 인터프리터의 경우 번역시에 에러를 발견하면 실행할 때에도 에러가 발생할 수 있으나 컴파일러 언어는 최초 번역시에 에러가 없다면 에러없는 코드로 바이너리 코드가 생성되기 때문에 실행시에 에러가 발생할 일이 없다는 장점 역시 존재한다.


    - 우아한Tech - [10분 테크토크]👩🏻‍💻👨🏻‍💻해리&션의 MVC 패턴

    지난 4월 나도 지원했다가 코딩테스트의 문턱을 넘지 못했던 우아한 테크코스 ㅋㅋㅋ

    어떤 분들이 합격하셔서 어떻게 코스를 진행중인지 궁금했는데, 유튜브 계정으로 학습내용을 공유해줘서 감사한마음으로 구독중이다. 기술 면접을 준비하면서 MVC패턴에 대해서도 정리가 필요했는데 이 영상으로 간단히 준비할 수 있었다.

    영상 속의 발표자들이 정리해주신 내용은 대략 다음과 같다.

    • MVC 패턴의 정의
    • 모델1과 모델2(MVC)의 정의와 차이
    • MVC 흐름
      • 클라이언트 -> 웹 어플리케이션 -> 컨트롤러 -> 뷰 -> 컨트롤러 -> 모델 -> DB -> 모델 -> 컨트롤러 -> 뷰 -> 클라이언트
    • MVC 패턴에서 Model, View, Controller의 역할
      • Model은 값과 기능을 갖는 객체이며, 비즈니스 로직를 수행하는 역할을 한다.
      • View은 모델에 포함된 데이터를 시각적으로 보여주는 역할을 한다.
      • Controller는 모델 객체로의 데이터 흐름을 제어하며 뷰와 모델의 역할을 분리한다.
    • MVC 패턴을 사용할 때의 이점
      • 컴포넌트의 코드 결합도를 낮추기 위해
      • 코드의 재사용성을 위함
      • 구현자들 간의 효율성을 높이기 위함

What I learned from this week.

노마드코더의 영상덕분에 컴파일러와 인터프리터의 차이를 다시 한 번 정리할 수 있었다.

이외엔 프로젝트 수행시에 하나 배운 것이 있다. sql문을 제어하는 DaoImpl 파일에서 공통적으로 사용하는 sql 제어문을 <sql>로 캡슐화할 수 있다. 이렇게 캡슐화한 제어문은 <include refid=""/> 명령어를 통해 사용할 수 있다.

내가 프로젝트에서 사용한 코드이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<sql id="selectBoard">
SELECT
boardno, tag, title, product,
content, writer, hit,
price, writtendate,
(SELECT COUNT(*)
FROM UsedComment_KG WHERE boardno = UsedBoard_KG.boardno) commentCnt,
(SELECT min(usedimgno) FROM UsedImg_KG WHERE boardno = UsedBoard_KG.boardno ) AS fileno
FROM
UsedBoard_KG
</sql>

<sql id="selectSearch">
SELECT rownum rnum, B.* FROM (
<include refid="selectBoard" />
</sql>

<select id="selectPageSearch"
parameterType="web.util.Paging4used"
resultType="web.dto.UsedBoard">

SELECT * FROM (
<include refid="selectSearch" />
) R
WHERE rnum BETWEEN #{startNo } AND #{endNo }

</select>

기본 게시판을 조회하는 sql제어문을 selectBoard 라는 id값으로 sql문을 만들었고, 이를 사용하는 코드에서 <include refid="" /> 문으로 사용했다.

이렇게 코드를 작성하니 xml에서 sql제어문도 객체지향적으로 정리할 수 있겠다라는 생각이 들었다.