티스토리 뷰

Log/.TIL

[TIL]171106-1112

가그린민트 2017. 11. 7. 09:15


11 / 09 (목) ~ 12 (일)

흠.. 어쩌다보니 TIL이 또 밀려버렸다.. 시간이 참 빠른 것 같다. 이번 주에 무엇을 했지ㅡㅡ?일단 가장 아쉬운 점은 프로젝트를 전혀 손을 대지 않았다. IA나 스토리보드도 제대로 확인하지 않았다. 기획자가 수정한 부분을 계속 공유받기는 했지만..전략을 좀 바꿀까 생각 중이다. 수업을 통해 얻는 부분이 많아, 좀 더 진행하고 작업을 진행하는 것이 효율적일 수 있다는 판단이 들었다. DI까지만 우선 수업에 집중해볼까 생각중이다. (흠.. 12월, 1월 두달동안 가능할까 걱정이 들기도 하고..)금요일에는 pobi에게 java logging에 대해 학습했고 restful api에 대해 이야기를 나누는 시간을 가졌다. logger를 사용하는 것, 로그레벨, log를 관리하는 다양한 방법들 등 syslog(혹은 rsyslog)와 유사한 점이 많아 이해하기는 수월했다. 추후에 상용서비스를 운영시에 로그 관리 정책에 대해서도 공부할 여지가 생겼다. 이번주의 소득 중의 하나는 Restful API에 대한 개념을 잡고 간 것. 하지만 현재 내가 습관적으로 작성하는 코드들은 REST와는 너무 멀어보인다. JPA까지 익숙하게 된다면 좀더 REST해질까.그리고 MVC 프레임워크 3단계까지 진행했다. 지난 연휴기간에 '자바 웹개발 워크북'을 독학할 때, 애노테이션의 동작 방식과 Java Reflection 부분이 정말 이해가 되지 않았는데, 이제 약간은 감을 잡은듯하다. (SLiPP에 DTO에서 Data get, set 등에 Reflection을 활용할 수 있다는 글을 보았는데, 아직 활용 방안까지는 잘 모르겠다.)그리고 이번 미션 중에 함수형 프로그래밍이 많이 익숙해졌다.(아직 Optional은 다소 헤매지만.. 처음에 추상 메소드도 낯설어서 하루종일 멘붕이었던 것을 생각하면..) 정확히는 자바 람다를 잘 쓴다기보다는 어느 시점에서 활용하면 좋을지에 대한 생각을 하게 된 게 나름의 소득인 것 같다. 주말에 Spring 기본 및 MVC 관련 이론을 가볍게 읽고 넘겨서 그런지, 실습 과정에서 다소 해멨다. 예제가 워낙 잘 되어 있어 Spring MVC 적용 및 HandlerMethodArgumentResolver까지는 금방 끝냈지만, ControllerAdvice는 맞게 한 것 같은데 401로 반환이 안된다. 뭐지 ㅡㅡ.그리고 DI 에 대해 잠깐 보았는데, 이번 학습을 통해 DI에 대해 Restful 처럼 좀더 명확하게 내 것으로 만드는 시간이 되었으면 한다.
아침에 영어회화하는 것. 이거 의외로 활력소가 된다. 프랑스어와 일어와 달리 영어는 그냥 싫었고, 그래서 정말 필요한 경우가 아니면 쳐다보지도 않았었는데.. 어머니의 권유로 시작하긴 했으나, 요새 조금씩 재미가 붙는 것 같다. 잘하려고 욕심 내지 말자. Last weekend was the day of 빼빼로Almost all of my friends have a girl friend. So I have a time at codesquad on Saturday and I laid around the house all day on Sunday. I was bored to death on last weekend.


11 / 07 (화) ~ 08 (수)

버스를 타고 오다 잠이 들었다. 이상한 기분이 들어 부리나케 내려보니, 처음 와보는 곳이었다. 그 상황이 지금의 나와 닮아있는 듯 했고, 조금은 위기감을 느꼈던 것 같다. 현재 위치를 확인하고 돌아갈 버스를 알아보니, 생각보다 멀리 오진 않았다. 돌아오는 길에, '왜 이렇게 열심히 인거지'. 잠깐 생각해보다 말았다. 최선을 다하고 있다는 생각은 들지 않는다. 어제 하려했던, Optional / Exception 공부한 부분 정리는 여전히 미루어져 있고, 프로젝트는 이번주 손도 못댔다. 오늘은 Restful API 정리한 것 외에는 한 게 없다. 일단 화요일에 포비에게 배웠던 Optional과 Exception 중 기억에 남는 부분을 좀 남겨놓자.

- Error : 애플리케이션이 정상적으로 동작하는데 심각한 문제가 있는 경우

- Exception : 비즈니스 로직 상에서 에러가 발생하는 경우 사용한다. Exception을 사용하는 경우 컴파일 시점에 Exception을 확인할 수 있다. Checked Exception이라고도 한다. - RuntimeException : NumberFormatException과 같이 Runtime 시에 발생하는 에러를 처리하는데 사용한다. UnChecked Exception이라고도 한다.


1. RuntimeException을 쓰더라도 메서드 옆에 throws를 선언해주자(명시적으로 어떤 Exception이 발생할 수 있는지 알리기 위해)2. flapmap을 쓰는 이유

1
2
3
Optional.ofNulllable(computer)
        .flatmap(Computer::getSCOpional)
        .orElse(UNKNOWN_VERSION);
cs

map을 사용할 경우 Optional<Optional><SoundCard>로 나오기 때문에 flatmap을 사용하여야 한다.3. .isPresent() : 값이 있는지 없는지 판단4. map이 없을 경우 null 체크를 안 할 수도 있다.

1
2
3
4
5
6
7
8
Optional.ofNulllable(user)
        .map(User::getAge)
        .filter(age -> age >= 30)
        .isPresent
 
Optional.ofNulllable(user)
        .filter(() -> getAge() >= 30)
        .isPresent
cs

5. findFirst()는 Optional을 return하므로 null이 있을 경우 orElse, 없으면 get()만 써도 된다.

1
2
3
4
users.stream()
    .filter(u-> u.matchName(name))
    .findFirst()      
    .orElse(DEFAULT_USER);
cs

6. throws 도 지원

1
2
3
4
users.stream()
    .filter(u-> u.matchName(name))
    .findFirst()      
    .orElseThrow(()-> new IllegalArgumentException());
cs

7. Enum의 경우

1
2
3
4
Arrays.stream(values())
.filter(...)
 
ENUM ->values() 쓰면 값들 가져옴
cs


그리고 JdbcTemplate 을 singleton방식으로 적용하고, DAO도 상태를 가지지 않는 클래스이므로 단일 인스턴스로도 충분하다고 보아 singleton 방식을 적용했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class JdbcTemplate {
    private static JdbcTemplate template = new JdbcTemplate();
    public static JdbcTemplate getInstance() {
        return template;
    }
...
}
 
public class AnswerDao {
    private JdbcTemplate jdbcTemplate = JdbcTemplate.getInstance();
        public Answer insert(Answer answer) {
        KeyHolder keyHolder = new KeyHolder();
        String sql = "INSERT INTO ANSWERS (writer, contents, createdDate, questionId) VALUES (?, ?, ?, ?)";
        jdbcTemplate.update(sql, keyHolder, answer.getWriter(), answer.getContents(),
                new Timestamp(answer.getTimeFromCreateDate()), answer.getQuestionId());
        return findById(keyHolder.getId());
    }
}
cs

그리고 누군가 PHP가 스크립트 언어인지 물어봤다.스크립트 언어는 무엇이고 인터프리터 언어는 무엇일까찾아보니 컴파일 방식 vs 인터프리터 방식으로 나누는 것이 맞을 것 같다. 인터프리터 방식은 한번에 한줄씩 읽어서 실행하는 방식이다. 스크립트 언어는 기존에 존재하는 어떤 다른 프로그램을 제어하기 위해, 기존의 프로그램들 위에서 구동이 지원되는 언어로, 소스코드를 한줄씩 읽어서 실행한다는 점에서는 인터프리터 방식과 유사하다. 다만 Java(혹은 python)의 경우 PC에 미리 설치해둔 자바 가상머신 위에서 프로그램이 구동되므로, 스크립트 언어는 아니나 바이트코드를 JIT 컴파일러를 통해 기계어로 변환 후 바이트코드 인터프리터로 해석하므로 인터프리터 언어 방식이라고 볼 수 있다.이 부분은 내일 포비에게 좀 여쭤봐야겠다.내일은 자바 Reflection을 학습하는게 좋을지, 프로젝트를 진행하는 것이 좋을지..
I'm in a bad mood for 치킨 와사비 덮밥I'm so stressed. I lack a sleep. I need to rest.But as of yet, I don't have that information about Spring at my fingertips So I need to study more.

11 / 06 (월)


오늘은 하루 종일 삽질은 한 날이었다. 외부 SQL스크립트를 ResourceDatabasePopulator를 통해 실행하는 부분에선 UTF-8 인코딩에러로 더미 데이터가 안들어가지질않나, 한글없이 더미데이터를 작성해도 ConnectionManager의 DB URL을 변경해야 적용되고.. Ajax로 값을 넘기는 부분에서 덧글추가하는 부분만 안되어서 한참을 해멨는데 웨일 브라우저에서 안되던 것이 크롬에서는 되는 허무함.. 이 부분을 JspView를 적용하던 중에 발견해서 계속헤매다 결국 2단계 처음까지 돌아갔다가 다시 시작했다. 그리고 Ajax로 값을 받은 부분이 화면에 바로 뜨지 않던 부분은 결국 집에와서도 헤매다 STS를 껏다 키니 된다 ㅡㅡ. 어제는 modal을 이용해서 만들었던 팝업창때문에 해메더만. 뭔가 계속 지치는 날의 연속이다. 그리고 내가 만든 프레임워크는 처음 호출하는 페이지의 경우에 왜이리 지연이 발생하는지.. 뭐. 그래도 오늘 아침부터 영어회화 수업을 시작했고, 그리고 일단은 2단계 완료 (?) 후 Pull Request를 보냈고. 흠.. 내일은 Exception과 Optional 학습으로 시작해야겠다.


'Log > .TIL' 카테고리의 다른 글

[TIL]171120-1126  (0) 2017.11.21
[TIL]171113-1119  (0) 2017.11.15
[TIL]171106-1112  (0) 2017.11.07
[TIL]171030-1105  (0) 2017.10.31
[TIL]171023-1029  (0) 2017.10.24
[TIL]171016-1022  (0) 2017.10.20
댓글
댓글쓰기 폼
링크
«   2020/04   »
      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    
Total
93,570
Today
50
Yesterday
168