CODE SQUAD/회고록

[CODE SQUAD] 주간 회고록 : 2022/2/7 ~ 2/12

샤아이인 2022. 2. 12.

 

주간 회고록

어느덧 코드스쿼드 에서의 CS10 과정이 끝났다.

돌이켜 보면 모르는 내용도 있었도, 새로 알게 된 CS 지식도 있었도, 여러모로 즐거웠던 과정이었다.

 

마지막 우리 조 멤버는 : 산토리, 피오, Shine, sally, Jerry, BC, Dave, 반스, Jun, Riako 였다.

 

 

CS10 - 9, 10

이번 주 CS 과제는

1) Docker와 DB

2) Http 통신

 

▶ Docker, DB

사실 DB는 오라클, MySQL을 기본적인 사용법을 공부해본 적이 있기 때문에 부담스럽지 않았다.

문제는 Docker였다. Docker로 컨테이너를 실행시킨 후, 나의 Host 컴퓨터의 인텔리제이 에서 Docker안에 있는 MySQL과 연결을 해야 했는데, 처음에는 그냥 바로 되는 줄 알고 삽질을 조금 하였다.

 

포트 포워딩을 해줬어야 정상적으로 HOST의 포트로 접속 시, 도커의 포트로 연결이 가능했다.

문제는 포트 포워딩을 처음에 설정해주지 않으면 변경할 수가 없었다는 점이다.

(찾아보니 compose.yml을 사용하면 된다고 하긴 하던데, 나 같은 경우 이번에 Docker를 완전 처음 사용해본 터라 이를 몰랐다)

 

따라서 다시 컨테이너를 생성하면서 다음과 같이 -p 옵션으로 포트 포워딩을 해주게 되었다.

-p 3306:3306

Host의 port와 Docker 내부 MySQL 서버의 port를 연동함으로써 사용이 가능하게 되었다.

 

추가적으로 생활코딩에서 Docker강의를 들으며 요약하였다.

 

[Docker] Docker 입문 수업

생활코딩의 Docker 입문 수업을 들은후, 요약과 추가 정리한 내용입니다. Docker 란? " data-ke-type="html"> <>HTML 삽입 미리보기할 수 없는 소스 Docker란 Go언어로 작성된 리눅스 컨테이너 기반으로하는 .

blogshine.tistory.com

 

추가로 읽어본 글은 다음과 같다.

 

Docker Container Network에 대한 이해

docker0, container network의 구조 NOTE 아래 그림은 docker의 network 구조를 간단히 도식화한 것이다. 여기서는 docker를 설치하면 가장 먼저 볼 수 있는 docker0 interface와 container network에 대해 알아본..

phantasmicmeans.tistory.com

 

▶ Http 통신

이번 Http 과제는 다음 조건 덕분에 배우는 점도 많았고, 난이도 또한 급 상승했다.

기존에 제공하는 HTTP Request 모듈이나 클래스를 사용하면 안 된다.
예를 들어 Node, 자바 또는 스위프트 파운데이션에서 제공하는 HTTPRequest나 URLRequest, URLSession 등 라이브러리를 사용하면 안 된다. (단, URL 객체는 사용 가능)

애당초 HTTPRequest를 통해서 Connection을 맺을 수가 없었다.

Request를 보내기 전에는 먼저 Connection을 얻은 후, Get 방식이든, Post 방식이든 메시지를 보낼 수가 있는데, 이 부분부터 다 구현해야 했다.

 

구현한 대략적인 나의 모습은 다음과 같았다.

다이어그램을 명확하게 그리지는 않았다.

 

  • HttpGet, HttpPost는 공통적인 HttpRequestBase를 상속하여 기능을 확장하도록 하였다.
  • TcpIpClient에게 request를 넘겨주고, execute를 실행하면 request에 담겨있던 정보가 연결된 Socket을 통해 전송된다.
public class MyHttpRequest {

    public static HttpResponse sendGet(String url) throws IOException {
        HttpGet request = new HttpGet(url);
        // 생략
        return send(request);
    }

    public static HttpResponse sendPost(String url, String param) throws IOException {
        HttpPost request = new HttpPost(url);
        // 생략
        return send(request);
    }

    private static HttpResponse send(HttpRequestBase request) throws IOException {
        setBaseHeader(request);

        TcpIpClient tcpIpClient = new TcpIpClient(request);
        HttpResponse response = tcpIpClient.execute();
        
        return response;
    }

    private static void setBaseHeader(HttpRequestBase request) {
        request.setHeader("Accept", "*/*");
        request.setHeader("Accept-Language", "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7");
        request.setHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)");
    }
}

 

큰 틀에서 요약을 좀 하자면,

1) 먼저 Tcp/Ip 소켓을 연결시켜야 한다. (HttpConnection과 유사한 기능을 위해서)

2) 연결된 소켓에 Http 메시지를 전달시킨다.

3) 결과를 돌려받는다.

 

CS10 중에 가장 재미있었던 과제였다. request 요청이 코드 상으로 어떻게 돌아가는지 확인할 수 있었던 시간이었다.

 

짝 프로그래밍

이번 주에는 짝 프로그래밍 시간이 있었다.

 

한 명은 Driver를, 나머지 한명은 Navigator 역할을 하면서 (15분씩), 내비게이터가 지도를 하고, 드라이버는 이를 수용하는 구조였다.

하지만 우리 팀 같은 경우 역할이 잘 분담되지는 않았다. 뭐랄까? 서로 도우면서 하려 했달까?

(사실 서로 도우면서 하는 게 더 좋은 것 아닐까? 란 생각은 아직도 있다)

 

Agile 개발 방법 중 하나인 이 "짝 프로그래밍" 은 짧은 시간 (길어도 2시간 이상 금지) 동안 하면, 스스로 생각하면서 즉각적으로 할 때와는 달리, 중간에 드라이버를 거쳐 코드로 결과가 생성되기 때문에 정확한 의사소통이 필요하다.

 

원활한 커뮤니케이션을 위해서는 1. 상대방을 짐작하지 말고 2. 텍스트가 아니라 콘텍스트(문맥)를 주고받아야 한다는 것이다.

 

이번 과정은 맛보기로 짧게 짝 프로그래밍을 진행해 봤는데, 정말 재미있었다 ㅋㅋㅋ 그냥 내가 누군가를 조종하는 느낌 자체가 매우 재미있다.

 

다만 다음에 짝 프로그래밍을 진행한다면, 명확한 의사소통과, 명확한 작업 분담을 통해 진행해야겠음을 느꼈다.

 

선배들과의 소통

이전 코드스쿼드 기수분들 중 취업한 분들과의 소통시간이 있었다.

Q, Lena, roach 총 3분을 모시고 진행하였다.

 

백엔드의 roach는 호눅스의 제자답게 대부분이 운을 통해 이루어졌다 말은 하셨지만...

(아마 본인의 노력으로 실력을 충분히 쌓으신 후 입사했다 => 운으로 말하신 것 같다... => 겸손함 까지!)

 

ios의 Lena는 본인의 노력한 부분을 예로 들어 알려주셨다.

가령 Lena는 원래 컴공이 아니라 CS10의 과정 동안 어렵고 몰라서 못했던 내용들은 포스트잇에 적어 책상에 붙여두었다고 하셨다.

이후 나중에 공부하다 포스트잇에 적어두었던 내용이 나오면 다시 cs10 때를 생각하면서 공부 후 지워나가셨다 말해주셨다.

본인의 어려웠던 점을 극복한 한 사례를 알려주셔서 좋았다.

 

추가 공부

알고리즘에서 L-트로미노의 과정을 수학적 귀납법을 통해 증명해 보았다.

 

[알고리즘] L-트로미노

1. 트로미노란? " data-ke-type="html"> <>HTML 삽입 미리보기할 수 없는 소스 트로미노는 크기가 같은 정사각형 3개를 변끼리 붙여 만든 다각형 이다. 따라서 다음과 같은 모양이 가능하다. 2. 트로미노로

blogshine.tistory.com

 

댓글