Page tree
Skip to end of metadata
Go to start of metadata

짝 프로그래밍

  • 동국&윤성
    • 1일차
      • 개발환경 설정.
        • git clone
        • https://coderwall.com/p/jxrhag 의 내용에 따라 Spork와 Guard 설치 (Cucumber와 Test Unit은 제외
          • Spork : 프로젝트의 개발환경이 바뀌면 테스트코드 자동실행
          • Guard : 프로젝트 파일이 변경되면 테스트코드 자동실행
      • Parsing을 위한 클래스를 모델에 생성
        • MusicParser 클래스 생성 및 테스트 클래스 생성
          • 테스트 파일은 끝에 spec이라고 명시해야 한다.
          •  

             

          • 코드분석

            • describe는 테스트할 행동을 기준으로 작성한다.
            • context와 it의 차이는 행동에 대한 테스트 개수에 따라 결정된다
              • it은 단일
              • context는 (context안에 적어준 상황일 경우)
            • before은 모든 상황이전에 처리할 항목을 작성해준다. (TestCase에서의 setup과 같은)
            • should be 를 should == 와 같이 작성할 수 있다.
            • 일반적인 String ""와 Symbol : 의 차이점에 대해 공유 (정확하게 해결되지 않았다)
      • RubyMine Tool 활용법 공유
        • Alt + F12 = 터미널창 열기
        • CMD + 1 = 오른쪽 디렉토리 열고 닫기
        • CMD + e = Recent 사용파일 목록
      • Git Flow에 대한 개괄적인 지식공유 및 Github 활용내용 공유
        • 이슈등록, reference 이슈 사용하기 (#1) 등
    • 2일차
      • 개발환경 재설정.
        •  spork는 설정이 되나, rspec이 자동실행 되지 않던 문제
          • Guard.file에서 < guard 'rspec', after_all_pass: false, cli: '--drb' do > 의cil: '~ 부분을 제거하니 작동된다.
        • 데이터베이스 Adapter 변경
          • 복붙하면서 mysql2로 기본설정되있던 adapter가 sqlite로 변경되면서 생기던 오류
            • 기존에 설치되어 있던 maria db로 연결이 바로 되더라 (데이터베이스 계정생성 및 권한 부여, config폴더 안의 database.yml 파일에 계정정보 등록)
      • Nokogiri Parser를 사용할까를 이전시간부터 회의하다가 결국 Parser를 만들어 보는것으로 결정.
      • Parser 모듈안에 (parser폴더와 매치) HTML클래스 (html.rb와 매치)를 이용해서  tag, class, id Parsing을 각각 기능으로 구현했다. 즉 최소단위를 하나의 HTML블록으로 접근
      • Parsing을 어떤식으로 구현할지를 토론. (regex:정규표현식을 사용할지, 일반적인 split, substring등을 이용할지를 논의. 일단 regex학습비용을 고려해서 일반적인 방법으로 접근)
      • tag Parsing기능 구현.(find_by_tag함수) / 소스코드의 가독성이 떨어지고, 비효율적이다는 생각을 하게 됨.
      • 리팩토링1 - 각각의 클래스에게 위임하면 되지 않을까? -> 최소객체단위를 의미단위로 나누게 됨 (tag, content, class, id) -> TagParser 클래스 생성
      • 리팩토링2 - 일반함수를 통해서는 예외처리를 모두 하기 힘들다는 생각을 하게 됨 (예를들어 class=, class = 등과 같은 공백처리나 여러 attribute값이 있을경우 등) -> regex함수 학습
      • 정규표현식의 테스트방식을 변경 / 기존에 일일히 테스트를 재시작해서 print해보던 방식 -> http://rubular.com/ 를 통해 해결
      • 회고
        • 서로 시간을 맞추는게 힘들었다 -> 길게 적은 횟수가 아닌 짧게 많은 횟수로 만나기로함. (매일아침 1시간씩)
        • (아직 합의되지 않은 사항) 스터디 직전에만 준비하게 된다 -> 우선순위를 높이고, 짝프로그래밍시 혼란을 줄이기 위해 각자 끝까지 구현해보고 만나는 방식으로 (루비스터디시간때 했던 방식처럼)
      • RubyMine Tool 활용법 공유
        • CMD + ALT + V = extract variable
        • '혹은 "로 이루어진 문자열을 블록설정후 '혹은 "버튼만 누르면 해당따옴표로 전체변경된다
        • CMD + SHIFT + T = 테스트코드와 서비스코드를 자동으로 전환해준다

2주차 스터디 회고

박재성

  • 스터디라 준비가 소홀하지 않을까 우려했는데 각 짝 별로 기대 이상의 준비를 해왔다.
  • 스터디 과정 중에 github과 이슈 관리 시스템을 연동해서 사용하는 것은 아직 익숙하지 않다. 팀 협업의 목적을 달성하고자 한다면 이 부분에 집중하는 것이 좋겠다.
  • 누군가 주도적으로 이슈 관리 시스템을 활용했으면 한다.
  • 짝 프로그래밍에 대한 회의적인 반응이 있었다.
    • 아직 짝 프로그래밍에 대한 동기 부여가 되어 있지 않은 상태이다. 이 시점에 어떻게 접근하는 것이 좋을까?
    • 다른 욕구가 우선이기 때문에 다른 욕구를 해소하도록 한다.
    • 개인에서 팀으로 관심사가 옮겨가기를 기다린다.
  • 마지막에 동국이의 성장 과정을 듣는 것이 의미가 있었다. 다양한 학생들의 학습 과정을 모아보면 의미가 있을 것으로 판단된다.

주디

  1. 개발환경 셋팅
  2. 구현한 것 공유
  • 개발환경 셋팅 (1주차 각목/모나의 스터디 자료 참고)
    • guard
      • 설정파일을 모니터 하는 기능
      • 어떤 파일들이 바뀌면 spork와 rspec을 재실행
      • 정규 표현식 등을 이용해 재실행할 특정 파일을 지정함
    • spork
      • 테스트 환경을 서버처럼 구축하는 것 (테스트에 필요한 환경을 로딩함)
      • rails 서버를 띄우면 환경설정을 계속 갖고 있는데, 이것도 테스트 환경을 갖고 있음
      • 다시 로딩할 필요가 없게 도와줌
    • rspec
      • 테스팅 함
  • RoR에서 필요한 이유
    • spring은 비즈니스 로직과 데이터 베이스가 나눠져 있기 떄문에 비즈니스 로직만 테스트 가능하다
    • 반면, RoR은 비즈니스 로직을 테스트 할 때 데이터 베이스를 무조건 로딩해야 하기 때문에 그것에 대한 시간을 고려 하는 것
    • cf) RoR은 active record pattern 으로 구현되어 있음
      • 항상 db와 연결 할 수 밖에 없는 구조
      • 자바는 분리개발할 수 있음
      • 테스트에 대한 접근 방식도 다름
      • java 진영의 패턴과 active record pattern 두가지가 가장 많이 사용되고 있음

  •  각목/모나의 짝코딩 결과 공유
    • 라이브러리 vs 직접 parsing
      • 'parser 라는 클래스를 상위로 만들고 네이버, 다음 등등의 parser를 만들자' 라는 계획을 갖고 시작
      • 시작 할 때는 최소 단위를 html 로 봤었지만 id, class, tag, content 등을 갖고 있기 때문에 점점 parser가 뚱뚱하고 더러워짐
      • tag parser 를 만들다가 중단됨
      • 너무 커질 우려가 있기 때문에 RoR보다는 Ruby 스터디에 적합하다고 생각
  • 주디/호구의 짝코딩 결과물 공유
    • 노코기리 라이브러리를 이용한 html 파싱(참고 사이트 http://nokogiri.org/)
    • 다음 뮤직 페이지를 보면 콘텐츠 마다 같은 구조로 되어 있음
      • ex) 앨범이 6개가 있다면 각각의 앨범을 감싸는 6개의 wrap코드가 존재
    • 한 콘텐츠를 감싸고 있는 html class 를 찾아서 그 속에서 노코기리 라이브러리를 이용해 원하는 내용을 추출
      • 콘텐츠를 포함한 html코드를 리스트 자료구조를 이용해서 저장
      • each-do(for문)을 이용해서 앨범 하나당 타이틀, 이미지 내용, 코멘트 내용을 가져옴
      • 키 / 밸류 값으로 결과물 저장
    • Q. 컨트롤러에 결과값을 처리하는 로직을 넣었는데 그것이 어디에 가는 것이 맞겠는가?
    • 라이브러리를 처음 사용할 때 내가 원하는 기능이 동작되는지 확인하는 테스트 코드를 작성하는게 중요함
    • 컨트롤러에 데이터를 잘 받아왔는지 테스트 하는 코드
      • ex) get일 경우 success 가 오는지
  • 짝코딩에 대해
    • 주디
      • 짝을 할 수 밖에 없다. 누군가의 도움이 여전히 필요하다.
    • 모나
      • 누군가와 해야한다. 소홀히 해서 그런 것 같다. 재미있어서 좋았던 것 같다.
      • 관심사가 맞아서 누구든지 무언가를 해보자고 하면 함께 할 수 있던게 좋았다.
    • 호구
      • 아직 잘 모르겠다
    • 각목
      • 원래는 상위와 하위의 격차를 맞추거나, 프로그래밍 입장에서 신입생이 코드 더럽히는 것을 방지하기 위해 관리자 입장에서 짝코딩을 하는 것이다. 하지만 우리 스터디에서는 두가지를 하기 위해 짝코딩을 하는게 아니니까 재미와 집중이라는 장점만 남은 것 같다.

  • 2주차 스터디를 마무리 하면서
    • 호구
      • 컨트롤러에 굳이 그 로직을 얻어야 하나? 와 같은 질문에 대해 인사이트를 얻지 않을까 생각했지만 미흡한 것 같아서 아쉽다.
      • 레일스 하는 법과 루비를 하는 방법은 다르다.
      • 실제로 해보니 잘 안된다.
    • 주디
      • 셋팅할 때도 여전히 어려운 용어에 익숙하지 않다.
      • 시간이 많이 필요하다.
    • 각목
      • 레일스를 하나 공부하면 다른 active record pattern을 접근할 때 편리한 것 같다.
  • 각목의 이야기
    • 맨 처음에 웹 프레임 워크를 정할 시기(소프트웨어 공학시간)에 레일스를 배우고 싶었다.
    • 루비도 모른 상태로 레일스를 엄청나게 해서 이해하는데 시간이 걸렸다.
    • 나중에는 레일스도 결국 루비로 되어있기 때문에 루비에 더 관심이 가게 되었다.
    • 한번 만들고 나니까 어떻게 돌아가는지 알 수 있게 되었다.
    • 한번 만들고 나서도 어색해서, 혼자 많이 만들어 봤다. (관심이 없어질때까지, 20번정도)
    • 계속 반복하다 보니 구조가 친숙해졌다 (셋팅, 디렉토리별 용도 및 플로우에 대한 익숙함)
    • 그 이후 레일스 자체보다는 모델에 관심이 많아졌고, 서비스를 운영하는 것 등에 관심이 갔다.
      • 코드에 손을 대지 않았을 때 모든 것에 쓰일 수 있는 학문들에 관심이 많아졌다.
      • 자료구조 알고리즘, OS에 대한 관심사가 밑바닥으로 나아가지 않고 서비스로 관심을 돌린 것은 학문에 대해 아직까지 관심이 덜한 것 같다.
    • 봉광민 선생님 과의 근로를 통해 네트워크, OS 등에 대해 깊게 이해를 하였다.
    • 개발 방법론에 관심이 생겼다. (어떻게 하면 효율적으로 개발 할것인가?)
    • OOP, TDD 등에 관심이 많아졌다 (현재)

 

  • 웹 서비스에서 자료구조 알고리즘이 얼마나 필요한가?
    • 어떤 웹 서비스냐에 따라 다르다. (친구, 영화, 음악 추천 등)
    • 데이터 사이즈에 따라서 다르다
    • 한번 배울 때 전체를 배우는 것 외에도 케이스가 생겼을 때 학습하는 것도 괜찮은 학습방향이다.
    • 디자인 패턴도 마찬가지로 굉장히 다양하기 때문에 구조를 개선하는 방향에서 학습하다 보면 더 오래 기억에 남을 수 있다.

생각 공유

나(째롱)의 학습 곡선

  • 학원에서 3개월 동안 자바 + 웹 프로그래밍(jsp/servlet) + 데이터베이스 학습
  • 기술 집중적인 관심 기간(1년차 ~ 6년차)
    • 자바지기 커뮤니티를 XML 기반으로 처음부터 끝까지 만들어 보는 경험
    • 온라인 강의를 위해 다양한 라이브러리를 사용해 보는 경험
    • 온라인 강의를 위해 다양한 라이브러리를 만들어 보는 경험.
    • 2~3개 외국 커뮤니티에 올라오는 모든 아티클 읽기
    • MVC 프레임워크 만들기
    • JDBC에 대한 라이브러리 만들어 중복을 제거하는 경험
    • UML, OOP, 패턴에 대한 관심
    • IDE, 버전 관리 시스템을 활용하는 경험
    • 기존 웹 프레임워크를 개선해 보는 경험
    • Struts 프레임워크를 활용하는 경험
    • ORM 프레임워크에 대한 경험
    • Ant 빌드 도구를 활용하는 경험
    • JUnit과 같은 테스트 프레임워크에 대한 관심
    • Spring 프레임워크에 대한 관심
    • Maven 빌드 도구에 대한 경험
    • TDD, 리팩토링에 대한 경험
    • 다른 사람에게 발표하는 경험
    • 책 쓰는 경험
  • 팀, 조직에 대한 집중적인 관심 기간(7년차 ~ 13년차)
    • 애자일 프로세스
    • 짝 프로그래밍
    • 린 소프트웨어 개발
    • 지속적 통합
    • 품질 관리
    • 리팩토링 및 유지보수
    • 자동화된 배포
    • 나만의 개발 도구 생성
    • 소통, 협업
    • 문화 만들기
    • 조직에 변화 만들기
  • 나와 교육 대한 관심 기간(13년차 ~ )
    • 나를 제대로 이해해야 다른 사람을 이해할 수 있다고 생각함.
    • 나를 이해하기 위한 다양한 시도들.
    • 일 속에서 즐거움을 찾기 위한 다양한 시도들
    • 배움과 학습 어떻게 일어나는 것인가?
    • 자료 구조와 알고리즘(진행 중)
    • OS(진행 중)
    • 시스템 아키텍처(진행 중)
    • 네트워크(진행 중)
    • 함수형 프로그래밍(진행 중)

 

주디의 관찰 결과

  • 1주차에는 각자 갖고 있는 경험의 정도가 너무 달라서 잘 어우러져서 스터디를 할 수 있을까 걱정했지만, 생각보다 스터디가 잘 진행된 것 같다.
  • '왜 사용하나'를 아는 것이 단순히 '~한 용도로 쓰인다.'로 배우는 것 보다 좋은 것 같다.
    • RoR에서 guard 등을 왜 사용하나에 각목이 답함으로써 active record pattern을 알게 되고, 자바진영 패턴과의 비교를 자연스럽게 이해할 수 있었다. 각각 따로 배운다면 그 유기적인 관계를 이해하기 어려웠을 것 같다.
  •  라이브러리 사용에 대해서도 차이점이 나타나는 것 같다.
    • 위에서 말한 레일즈의 숙련도에 따라서 루비에 대한 관심이 나타난다.
    • 주디(덜 숙련된 사람)의 경우 
      • 아직 레일즈 자체에 관심이 많았기 때문에 우선 서비스가 돌아가는 것을 첫번째로 봤다.
      • 라이브러리를 사용해서 데이터 파싱에 따른 뷰를 빨리 보여주고 싶었다.
      • 데이터 파싱 기능을 하는 클래스를 만들 수 있겠다는 생각을 하긴 했었지만 우선 순위에서 뒤로 밀려있었다.
    • 각목(숙련된 사람)의 경우
      • 루비를 최대한 활용한 방향으로 코딩을 하였다.
    • 라이브러리에 대한 개인적인 생각이 다르기 때문에 라이브러리 사용에 차이점이 나타났을 수도 있을 것 같다.
      • Q. 라이브러리에 대한 생각은 숙련도에 따라 어떻게 달라질까?

 

 

  • No labels