특정 인프라가 불안정해서 때때로 오래 걸리는 메서드가 있다고 가정해보자.오래걸릴 경우는 무조건 이상 상황이다. 기다리지 않고 다음 일을 진행하는 것이 좋다.네트워크 단에서 문제를 해결하고 싶지만, 내가 그쪽 코드는 건드리지 못하는 상황에서 메서드에 타임아웃을 거는 방법이 있다. java.util.concurrent.ExecutorService, java.util.concurrent.Future 를 활용하는 방법이다. import org.junit.Test; import java.util.concurrent.*; public class ExecutorTest { @Test(expected = TimeoutException.class) public void executorTest() throws Except..
16년 9월 9일 금요일 첫번째 front-end 스터디를 했습니다. 주제는 angular2 소개였으며, 범균님과 재섭님이 준비해주셨습니다. 정말 최근 front-end 흐름을 쫓아가지 못하는 저로서는 그냥 마냥 신세계였습니다.이런 무식자인 제가 느낀 점을 그냥 적어보려고 합니다. [그림1] angular2 architecture overview (출처 : angular2 공홈) 1. angular2 는 (컴포넌트를) type script로 작성한다.type script는 자유도 높은 javascript를 type safe하게 해주고 좀 더 객체 지향적으로 개발할 수 있게 해준다고 대략 알고 있습니다. 그 코드를 보니 자바와 비슷한 느낌을 받았습니다. 자바 개발자가 좀더 쉽게 적응할 수 있을 것 같습니다..
link : http://www.fastcampus.co.kr/dev_camp_jwp/강사 : 자바지기(박재성) 님 (인터뷰 : http://www.fastcampus.co.kr/dev_camp_jwp_blog_instructor_1/) 지난 7-8월은 정말 힘든 여름이었습니다. 이상고온과 많은 업무 그리고 보라매에서 신사(패스트 캠퍼스)까지 먼 거리 이동 때문에 많이 힘들었습니다. 또한 저희 회사는 목요일 저녁, 금요일 새벽에 배포를 하는데 목요일 강의가 있기 때문에 저는 매번 금요일 새벽에 출근해야 했죠. 말그대로 7월 8월은 기운이 따 빠져있는 상태였습니다. 그래도 패스트 캠퍼스에서 자바 웹 프로그래밍 강의를 듣고 온 날은 기분이 참 좋았습니다. 그리고 강의가 다 끝난 지금 돌아보니 억지로라도 간 ..
신림프로그래머 클린코드 Jpg from Yeomyeong Woo 어제(2016.06.18) 제가 정말 좋아하는 신림동 프로그래머에서 공개 세미나를 했습니다. 저도 용기내서 "클린코드"라는 주제로 발표를 했는데요. 참 좋았습니다. 발표자료를 공유합니다. http://www.slideshare.net/YeomyeongWoo/jpg-63215333 이상하게 키노트에서 pdf로 만든 파일을 slideshare에 올리면 한글이 다 사라지는 경우가 있었습니다. slideshare에 있는 슬라이드는 이미지로 만든 슬라이드입니다. 그래서 텍스트가 있는 pdf 파일도 여기에 같이 공유 드립니다. 조금이라도 도움이 되길 바랍니다.
오늘은 TDD 8장 까지 스터디를 하였습니다. 8장의 내용은 Dollar와 Franc이라는 각 지역별 화폐 객체에서 Money라는 상위클래스를 추출함으로써 한 단계 추상화하고 각 코드의 중복을 제거하는 부분이었습니다. 캔트 백은 중복을 제거하면서 상위 클래스에 펙토리 메서드를 만듭니다. 저는 이 부분이 너무 어렵게 느껴졌습니다. 과연 내가 그런 상황에서 펙토리 메서드를 생각해낼 수 있었을까 하는 의문이 들면서 말이죠.좀 더 고민해보니까, 이런 결론을 얻었습니다. 추상화를 하고 나서 구상 클래스 (Concrete class)와 클라이언트 코드간의 의존성을 제가하는 것은 당연한 것이다. 펙토리 메서드를 생각해 낼수 있느냐의 문제가 아니고, 구상 객체와 클라이언트 코드간의 의존성 제거를 위해서 꼭 해야하는 일..
이 책은 스프링 세미나에 갔다가 발표자 분과 같은 동네에 산다는 이유로 받은 책입니다. 다시 한번 감사드립니다. 정말 꼭 봐야할 책을 본 느낌입니다. 그리고 앞으로 어떻게 더 공부해야할 지 방향성을 잡는데 큰 도움이 되는 책이었습니다. 그리고 혼자 읽은 것 보다 스터디 원들과 함께 읽고 토론했던 것이 참 좋았습니다. 놓치기 쉬운 부분도 잘 잡을 수 있었습니다. 그리고 발표자료를 준비하면서 더 단단히 다질 수 있었습니다. 이 책에 대해서 갑을논박이 있는 것으로 압니다. 그런데 저는 이 책은 개발자라면 꼭 봐야하는 책이며 이론과 실전의 조화가 잘 잡힌 책이라고 느꼈습니다. 다음의 세가지 이유를 들어서 이 책을 추천합니다. 첫째, 클린코드가 얼마나 어려운 일인지 알려주는 책입니다. 클린 코드를 작성하려면 고려..
아직도 한참 멀었습니다. 자바스크립트는 아직도 참 어렵습니다.약 2년 전 쯤, 이 책으로 회사에서 처음 스터디를 했습니다. 어려웠지만 자바와 C만 알던 저에게 새로운 세계를 보여주었습니다. 최근에 좀 난이도 있는 자바스크립트 작업을 해야해서 다시 이 책을 펼쳤는데 또 새롭네요. 다시 읽어보려 합니다.그래도 한번 읽어본 사람으로서 간단하게 소개해 드리고 장점을 알려드리고자 합니다. 우선 간단하게 소개해드리면, 이 책은 제목처럼 자바스크립트의 패러다임과 내부 원리를 자세히 설명해주는 책입니다. 일급 객체, 함수, this 바인딩, 프로토타입, 클로저, 실행 컨텍스트(like 콜스택의 실행정보) 같은 개념을 소개해줍니다. 단순히 자바스크립트를 써보려고 읽는 책과는 조금 차이가 있죠. 나중에는 더 어려운 함수형..
지난 달 회사에서 진행했던 클린 코드 스터디가 마무리 되었습니다. 우선 끝까지 수고해주신 스터디원 여러분 진심으로 감사하드립니다. 이제인 매니저님이 제안한 방법으로 회고를 진행했습니다. 회고 방법은 다음과 같습니다. 1. 포스트잇에 이번 스터디를 하면서 떠오르는 생각들을 막 적습니다. 2. 다 적으면 보드에 붙입니다. 3. 포스트잇을 분류합니다. 4. 분류한 내용에 대해서 이야기해봅니다. 밥 / 지원 / 스터디 시간 / 걱정 / 내용 (느낀점, 좋았던점) / 방향성 으로 분류했습니다. 그리고 아래와 같은 이야기를 도출했습니다. - 점심 시간 스터디는 좋았음. - 화-금 점심이 좋음. 금요일 새벽 배포 일정을 고려해서 화는 고정으로 하고 목,금을 유동적으로. - 대신 배가 고프니, 샌드위치 혹은 피자를 먹..
저는 정확히는 2.2버전의 책을 보았습니다. 큰 수정이 없었을 것이라고 생각하고 리뷰를 작성합니다. 이 책은 자바 웹 개발자의 입문서로 정말 강력하게 추천합니다. 그 이유는 세가지 입니다. 첫째, 자바로 만드는 웹 서비스에 대한 기본을 알 수 있습니다. 서블릿에 대한 이해, 내장 객체, 쿠키, 세션 등 에 대한 이해를 통해서 작게는 서블릿과 JSP를 이해할 수 있고, 더 나아가서 지금 우리가 사용하는 자바 웹 프레임워크에 대해서도 이해할 수 있습니다. 둘째, 초보자들에게 필요한 간단한 설계 방법이나, 코딩 가이드를 예제 코드를 통해서 익힐 수 있습니다. 저 같은 경우는 회사에 처음 들어갔을 때, 서비스 레이어, DAO 레이어에 대한 이해도 없었고, 그 것에 대해서 자세히 설명해주시는 분도 없었습니다. 이..
저희 회사는 SVN으로 형상관리를 합니다. 그런데 매번 프로젝트 할 때마다 브랜치를 따고 다시 머지하는 것이 정말 귀찮고 짜증나고 심지어 무섭습니다. 뭐라도 놓칠까봐.. 그나마 intelliJ를 쓰면서 좀 편해졌습니다만 그래도 뭔가 더 좋은 툴이나 방법이 있을 것 같았습니다. 그래서 구글에 intellij svn merge branch into trunk라고 검색해봤습니다. 그리고 https://www.jetbrains.com/help/idea/15.0/integrating-changes-to-from-feature-branches.html 이페이지가 나왔습니다. 그런데 이해가 잘 안가더라고요. 그래서 제가 스샷으로 쉽게 정리해보았습니다. 1. 우선 Version Control 탭으로 가서 Subvers..
카톡을 보게 되면, 한글 -> 영문 -> 특수문자 순으로 정렬을 합니다. 지난 번 프로젝트 하면서 동일한 요구사항이 있었는데, 생각보다 머리아프더라고요. 그냥 문자열순으로 정렬하면 그 순서가 안나오니까요. 그래서 이번에 아스키 코드를 보면서 그걸 하나하나 확인하면서 작업을 했습니다. 우선은 해당 문자가 어떤 종류인지 알아야겠지요.그래서 그걸 확인하는 UTIL을 하나 만들었습니다. /** * 문자 관련 유틸 */ public class CharUtil { public static boolean isEnglish(char ch){ return (ch >= (int)'A' && ch = (int)'a' && ch = Integer.parseInt("AC00", 16) && ch =..
상황. 참 잘 돌아가는 소스코드이지만, 웹 상품 리스트 쪽 레거시 코드가 참 맘에 안들었습니다.첫째로 맘에 들지 않았던 것은 뷰단의 jsp 코드가 제 마음에 너무 들지 았았습니다. 스크립틀릿으로 중복되고 복잡한 로직이 있는 것도 맘에 들지 않았고, 스크립트와 스크립틀릿이 섞여서 이해하기 어렵고 수정하기 어렵고, 스크립트와 html간의 의존성이 높은 코드도 맘에 들지 않았습니다.둘째는 같은 비즈니스 로직인데 앱쪽과 웹쪽이 다른 식으로 구현된 것도 맘에 들지 않았습니다.셋째도 비슷한데 같은 화면인데 다른 로직과 다른 파일들로 구현된 것이 맘에 들지 않았습니다.그래서 이 부분을 꼭 수정하리라 벼르고 별렀습니다. 신규 프로젝트가 시작되었습니다. 이번 기회에 맘에 안드는 부분을 뜯어 고치기로 계획했습니다. 사실 ..
1. 구구절절 설명 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락을 하고 자동으로 내용이 갱신되도록 하는 방식입니다. 상태가 바뀌는 객체를 주제(Subject)라고 하고 그 주제의 상태에 의존하는 객체를 옵저버(Observer)라고 하며, 주제와 Observer가 일대다( one-to-many)의 의존성을 갖습니다. 위 클래스 다이어그램을 보실까요. 주제가 있죠. 주제에서 옵저버 인터페이스를 구현한 클래스들을 추가 삭제할 수 있습니다. 보통 리스트의 형태로 옵저버들을 저장하고 있습니다. 그리고 notifyObserver를 통해서 옵저버들을 update해줍니다. 이처럼 주제와 옵저버들은 일대다 관계를 맺고 있습니다. 2. 특별한 특징 옵저버들은 주제에 의존성을 가지고 주제가 갱신될 때 ..
또 좋은 기회가 생겨서 K사의 면접을 보게 되었습니다. K사는 N사와 더불어서 우리나라의 대표 IT기업이죠. 이번에 저는 경력직으로 카페 서비스를 하는 팀에 지원했습니다. 면접은 1차로 기술면접, 2차로 인성면접이라고 합니다. 오늘은 1차 면접이었는데, 1차에서는 면접관으로 해당 팀의 리더분과 동료분들이 같이 오셨고 한 분은 다른 팀에서 오셨습니다. 그렇게 총 5명의 면접관과 함께 면접을 보았습니다. 질문의 리스트는 아래와 같습니다. - 자기소개 하시오- 디스패처 서블릿은?- 이직 사유는?- OCP 와 DIP 에 대해서 설명하시오- ISP 를 설명하시오. -> 잘 몰랐다, 인터페이스에 대고 프로그래밍 하는 것, 결국 OCP- 고안한 레이어드 아키텍쳐를 설명하시오- 협업시의 장점을 말하시오 -> 내가 일을..
2016년을 맞이하여 학습 계획을 세웠습니다. 간단하게 지금의 제 상황을 설명드리면, 2년차 개발자이고요, 자바 서버 개발을 주로 하고 있습니다.짧게 고민해본 결과 4가지의 능력을 향상하기로 결심했습니다. 1. 클린 코드 능력필독서 : 리펙토링, 구현패턴, 클린코드 2. 문제 해결 능력필독서 : 알고리즘 문제 해결 전략, 코딩 인터뷰 완전 분석 3. 영어 능력필독서 : English for Developers 4. JAVA 능력필독서 : Effective Java, Java 8 in Action +알파WEB 의 이해 - HTTP, REST 등객체지향의 사실과 오해 앞으로 스터디 과정은 가능한 블로그에 적어두려고 합니다.조금이나마 이 글을 읽는 분들께 도움이 되었으면 합니다. (이 글은 계속 수정 될 수 ..
서론. 요새 김종배 선생님의 시사통이라는 프로그램을 잘 듣고 있습니다. 현재 우리 사회의 이슈를 잘 짚어 주셔서 재미있게 듣고 있죠. 그런데 듣다가 굉장히 생소한 이야기를 들었습니다. 잠깐 나온 이야기인데요, '지적 재산권이 사회의 지적인 성장을 방해한다' 는 이야기 였습니다. 여러 가지 고민 끝에 그 말이 맞는 것 같다고 생각했습니다. (그 이유는 지금 자세히 다루지 않겠습니다.) 그리고 오픈 소스가 가득한 IT 세계에서 일한다는 것이 꽤 맘에 들었습니다. 그래서 저도 제 경험을 좀 공유해 보려고 합니다. 한국에서 유명한 포털사 N사 면접 후기입니다. 본론. 회사를 다니다가 가벼운 마음으로 (마지막이다 하는 기분으로) N사 신입공채에 지원했습니다. 때마침 그 직전에 포트폴리오를 만들어 둔게 있었고, 생..
일하다가 특이한 문제를 해결한 경험이 있어 공유합니다. 1. 문제갤럭시 노트2, 갤럭시 S3 > 기본 인터넷 브라우저 > 상품 리스팅 화면 에서 나오지 말아야 할 것들이 나오고, 나와야 할 상품이 나오지 않았습니다. 2. 문제 분석해당 브라우저는 chrome inspect 로 디버깅이 불가능하여, 사내에 있는 weinre라는 툴을 사용하여 디버깅했습니다.문제시 되는 영역에 try { /* 문제 영역 */ } catch ( e ) { console.log( e ); }이렇게 코드를 추가하여 디버깅 하였습니다. 2. 문제 원인화면의 상품을 교체할 때, 특정 버튼을 제거하는 코드가 있었는데, 아래처럼 구현이 되어 있었습니다.var btnArea = productArea.querySelectorAll('.btn..
사실 지난 번에 포스팅한 '[JAVA:reflection] typesafe하게 특정 메서드 객체 가져오기 ' 나 '[JAVA] 현재 실행중인 메서드 가져오는 방법' 은 내가 어떤 문제를 해결하기 위해서 찾다가 알게 된 것이었다.그 문제는 아래와 같다. 우리는 보통 데이터를 캐싱된 데이터를 가져오거나 입력할 때,1) 캐시 서비스 객체를 초기화하고, 2) 캐시키를 만들고, 3) 설정된 캐시팜에서 캐시키를 통해서 객체를 가져오고4) 객체가 NULL이면 실제 서비스 객체를 통해서 데이터를 가져오고5) 가져온 데이터를 캐시키에 맞게 캐시팜에 입력하고6) 가져온 데이터를 리턴하는 위와 같은 로직을 반복하고 있다. 이러한 중복되는 로직을 메서드로 추출하는 것이 문제이다. 문제를 해결하기 위해서 많은 고민을 해봤지만,..
자바에서, java.lang.reflect.Method 클래스의 invoke 메소드를 써야할 경우들이 있습니다.그런데 보통 리플렉션을 통해서 메서드를 가져올 때 String 타입의 메서드 이름과 파라미터 클래스를 통해서 메서드 객체를 가져옵니다.이 방법의 단점은 문자열로 메서드를 검색하기 때문에 typesafe 하지 않다는 단점이 있습니다.(리펙토링을 해서 메서드의 이름이 바뀐다면, 에러가 나지는 않지만 그 기능은 사용할 수 없게 됩니다.) 그 단점을 극복하기 위해서 여러 방법을 찾아 보다가, MethodSelector라는 것을 알게 되었습니다.https://gist.github.com/stijnvanbael/5965609 public interface TestService { public TestBO ..
개발할 때, 별 생각없이 체크하거나 체크 안하거나 하는 체크박스가 있었습니다.바로 tomcat options 중에서 Serve module without publishing 이었습니다.저는 그냥 무언가를 publishing 하지 않고 그냥 가져오는 구나 했었었죠.체크를 해도 그만, 안해도 그만이라고 별 생각 없이 쓰고 있었습니다.저희 팀 위키에 그 체크박스를 체크하라고 했지만 해도되고 안해도 되었기 때문에 저는 안했습니다.성격상 해도 되고 안 해도 되는 것들은 안했거든요. 그런데 어느날, 개발 환경이 바뀌어서 다시 서버 세팅을 하고 있었습니다.reimaginer 프로젝트라고 해보죠. 그런데 reimaginer 프로젝트는 뷰단 템플릿을 그려주는 viewTemplate 프로젝트에 의존적이었습니다. 그 템플릿..
**웹 개발자를 위한 웹을 지탱하는 기술 - 야모모토 요헤이 저 - 에서 발췌URI 설계 01. 쿨한 URI은 변하지 않는다.- 초기 웹 페이지는 URI가 변하는 것이 일상다반사였다.- 고생해서 모아둔 링크들이 1년 후에는 절반 이상 연결되지 않았다.- 웹은 리소스에서 다른 리소스로 연결되는 링크가 있는 하이퍼미디어 시스템이기 때문에 링크가 끊긴다는 것은 큰 문제이다.- 그래서 팀 버너스-리는 URI는 변하지 않아야한다고 주장했다. 02. 쿨한 URI 만들기1) 프로그래밍 언어나 구현 (프레임워크 등)에 의존적인 확장자와 경로를 포함하지 않는다.ex) http://example.com/cgi-bin/login.pl - cgi의 쇠퇴- peal 언어로 작성됨. 만약 똑같은 서비스를 다른 언어로 재구현 한다..
**웹 개발자를 위한 웹을 지탱하는 기술 - 야모모토 요헤이 저 - 에서 발췌URI 스펙 01. URI - 리소스를 통일적으로 식별하는 ID 02. URI 구문 ( RFC 3986 )ex) http: //reimaginer.tistory.com/entry/xper- URI Scheme : http --> 그 URI가 이용하는 프로토콜- 호스트 명 : reimaginer.tistory.com- 패스 : entry/xper ex) http: //reimaginer:password@www.tistory.com:8011/search?keyword=xper&debug=true#n10- URI Scheme : http- 사용자 정보 : reimaginer:password- 호스트 명 : www.tistory.com..
**웹 개발자를 위한 웹을 지탱하는 기술 - 야모모토 요헤이 저 - 에서 발췌 [ 기초 ]- 아키텍처 스타일 : (매크로) 아키텍처 패턴, 복수의 아키텍처의 공통된 성질, 양식, 규정 혹은 독특한 방식을 가리키는 말. ex) MVC, 파이프 앤 필터터??, 이벤트 시스템- 디자인 패턴 : 마이크로 아키텍처 패턴, 아키텍처 스타일보다 입도(Granularity)가 작은 클래스 등의 설계 양식** 구현에서 추상도를 한단계 올린 것이 아키텍처이고, 아키텍처에서 추상도를 한단계 더 올린 것이 아키텍처 스타일이다. 추상화 레벨 웹에서의 예 아키텍처 스타일 REST 아키텍처 브라우저, 서버, 프록시, HTTP, URI, HTML 구현 Apache, Firefox, chrome REST 는 웹의 아키텍처 스타일이이다..
대학교 때 처음 이것을 배웠을 때는, '와! 이렇게 하면 대박 좋겠다!' 였습니다. 그런데 회사에 와서 그 패턴들을 적용하려고 할 때, 간혹 '그게 왜 좋아?' 라고 묻는 사람들이 있었습니다. 사실 저는 좋을 것 같다라는 막연한 생각만 있었고 왜 좋은 지에 대해서는 책에서 설명하는 뻔한 이야기 밖에 할 수가 없었습니다. 예를 들어 '특정한 상황에 맞는 해결책을 빠르게 찾을 수 있고, 상황에 맞는 올바른 설계를 보다 빠르게 적용할 수 있다' 이런식으로 이야기 했죠. 그런데 어느날 '과연 진짜 그 상황에 맞는 해결책인가? 남들도 쉽게 이해할 수 있고, 수정할 수 있을까?' 이런 고민을 많이 하지않았기 때문에 남들에게 코드가 허세로 보일 수도 있을 거란 생각을 하게 되었습니다. 별 것도 아닌데 패턴이랍시고 쓴..
호출된 URL을 가지고 PV를 집계하는 솔루션이 있습니다. 그런데 어느 날 부터 모바일의 특정 페이지 PV가 평상시의 세배 이상으로 증가했습니다. 아무리 원인을 찾아봐도 3배로 증가할 외부적인 요인이 없었습니다. 팀장님께서 혹시 img태그나 script태그의 SRC에 빈문자열이 들어가있는지 확인해보라고 하셨습니다. 크롬에서 콘솔을 열고 jQuery를 이용하여 찾아봤지만 그런것은 없었습니다. 피들러를 이용해서 한번 호출시에 여러번 URL을 호출하는지 확인해보았지만 그런 것도 없었습니다. 참 답답했습니다. 그런데 이미지의 크기를 변경시키는 스크립트 함수 중에서 이미지 URL을 사이즈 별로 계산하여서 SRC에 삽입하는데, 생각보다 빈 문자열이 되는 상황이 많았습니다. 그 부분이 가장 의심스럽긴 하지만 피들러로..
오늘 JSP(최범균님의 JSP2.2웹프로그래밍) 스터디 하다가 궁금한 점이 생겨서 테스트 해보았습니다. 책 222 쪽에는 버퍼가 없을 때는 액션 태그를 사용하면 에러가 발생하며, 또한 버퍼가 차서 버퍼의 내용이 웹 브라우저에 한번 전송한 이후에 액션 태그를 사용하는 경우에도 JSP 규약에 따라 에러가 발생한다고 나와있습니다. 과연 어떻게 에러가 날까요? 이렇게 코드를 작성했습니다. 버퍼의 크기는 1kb로 설정했어요. 그 다음에 반복문으로 "reimaginer"라는 문자열을 계속 출력하도록 했고요, 반복문이 끝난 이후에 액션 태그를 사용하여 같은 경로에 있는 foword.jsp로 이동하도록 구현했습니다. 그럼 결과는 ? 엥 잘 나오네요? 그런데 가만 보니 마지막에 "r"만 남아있습니다. 버퍼를 플러시 한 ..
- Total
- Today
- Yesterday
- 실수노트
- spring boot
- 한달살기
- 객체지향
- hands-on
- S68
- javascript
- container
- Docker
- 사누르
- 컨테이너
- 발리
- ES6
- AWS
- 도커
- sanur
- Clean code
- 개발자
- 웹
- springboot
- 회고
- AWSKRUG
- html
- 웹을 지탱하는 기술
- rest
- 독후감
- Bali
- spring
- ecma6
- ChatGPT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 28 | 29 | 30 | 31 |