일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 개발7년차매니저1일차
- 테스트주도개발
- 박종천
- 실전사례
- 개발자
- spray
- wait region split
- 회고
- 2016년회고
- kafka
- 데이터야놀자
- functional thinking
- 개발자로살아남기
- Raw-Request-URI
- 데이터레이크
- datalake
- 2017회고
- 알고스팟
- 해커컵
- coursera
- 동시성
- 단위테스트
- 함수형 사고
- 데이터유통
- hackercup2017
- 데이터플랫폼
- 코딩인터뷰
- clean code
- 켄트백
- 클린코드
- Today
- Total
목록전체보기 (97)
Software Engineering Note
이런 고민을 해봤다면, json string을 DB에서 꺼냈는데 이상하게 보인다.json string을 DB에 넣었는데 한글이 깨져보인다.json 처리 하는데 한글 문제를 겪었다.json 필드 순서를 유지하고 싶은데?... 다음을 참고 하시라! 내가 뭘 하려고 했냐면, DB에서 json 필드를 꺼낸다 => json object 형태로 변경 => 특정필드 수정 => json string으로 변경 => DB에 넣는다 어떻게 했냐면, 1. DB Connection 설정 dbo = MySQLdb.connect(host="x.x.x.x", port=3306, user="user", passwd="passwd", db="dbname", charset="utf8") 2. json load json_obj = json..
우리나라 시간으로 2015년 1월 18일 (일) 새벽 3시부터 라운드1이 열렸다. 예선에서 한 문제를 맞춰 라운드1에 왔다. 빨리 푸는 순서로 다음라운드로 올라가는줄 알고 새벽 3시에 일어날 생각하고 있었는데 다행히 순위 관계없이 동점자 모두 진출 규칙이라 아침에 일어났다. 바로 카페로 가서 풀이 시작.. 한 문제라도 풀 수 있을까? 걱정했지만 생각보다 많이 풀렸다. 1. Homework 주어진 숫자 범위 내에 정해진 소수 갯수를 약수로 갖는 숫자가 몇 개인지를 판단하는 문제다. 결국 소수 구하는 문제인데 입력 크기를 보면 그때 그때 구하는건 무리다. 조건에 맞게 캐시를 만들어놓고 계속 캐시를 이용하도록 했다. 관련 알고리즘: 아리스토테네스의 체코드: https://github.com/xgate/comp..
2015년 1월 9일 (금) 페이스북 해커컵이 열렸다. 대회가 열리는지도 모르고 있었는데 사내에 관심있는 사람들은 모여서 같이 하자는 글이 올라와서 알게되었다. 할 일도 딱히 없어서 회의실에 모여 문제를 풀었다. 저녁 8시에 모였는데 이미 대회는 시작되었더군.. 내가 풀기 시작했을 때도 60시간 넘게 남아있었으니.. 예선전답게 문제푸는 시간은 넉넉하게 주어졌다. (여기에 제시된 코드는 대회때 제출한 것은 아니고, 나름 다듬은 후에 input/output으로 검증한 것임을 알려둔다.) 1. Cooking the Books 주어진 숫자에서 한 번만 swap해서 최소/최대 값을 찾는 문제. 아.. 문제를 읽고 섣불리 풀다가 물먹은 문제다. 역시 방심은 금물.. 입력 값이 길지않기 때문에 모든 경우의 수를 만들..
문제: MMRECT2 / 구현 MMRECT1 문제랑 똑같은데 점의 갯수가 최대 20,000 개까지 입력될 수 있다. MMRECT1 처럼알고리즘으로 풀면 TLE를 면치 못하겠다. 해서, 메모리를 좀 이용하기로 했다. 해결전략 1. x좌표가 같은 점들을 한 곳에 모아놓는다. (map)2. 루프를 돌면서 입력된 점을 하나씩 꺼내고, map에서 좌표리스트를 꺼낸다.3. 좌표리스트를 돌면서 다음을 수행 (정사각형의 조건을 생각해보자)- x좌표는 어차피 같으니까 y 차이를 구한다. (=dist)- 좌표 p1, p2에서 같은 방향으로 dist만큼 떨어진 점이 있는지 찾아본다.- 예를 들어, y 값이 2 차이나면 두 점의 왼쪽에 2만큼 떨어진 곳에 점이 있거나, 오른쪽으로 2만큼 떨어진 곳에 점이 있어야한다.4. 정사..
문제: MMRECT1 / 구현 문제를 처음 보고 "좌표를 어떻게 표현해야 할까?" 하는 고민.. -10000 ~ 10000 범위를 모두 표현하기는 불가능해보인다. 점의 갯수가 50개 이하니까 입력된 점을 체크해보는 방식이 합리적으로 보인다. 정사각형의 특징을 이용하면 빨리 풀 수 있을 듯 해결전략 1. 시작점 하나를 선택2. x는 같은데 y좌표가 다른 점을 찾는다. 그리고 거리(=dist)를 구한다.3. y는 같으면서, x가 dist만큼 떨어진 점을 찾는다.4. 2에서 구한 점의 y 좌표와, 3에서 구한 점의 x 좌표를 값으로 갖는 점이 존재하는지 체크하고 최소/최대값 갱신 코드: https://github.com/xgate/algospot/blob/master/IMPL/MMRECT1.cpp
(이 장에서는 주로 외부 라이브러리나 패키지를 사용하는 방법을 다룬다.) 외부코드 사용하기 wrapping 클래스를 만들어 제한된 메소드만을 제공하여 악용할 소지를 없앤다. Map과 같은 경계 인터페이스를 이용할 때는 이를 이용하는 클래스나 클래스 계열 밖으로 노출이 되지 않도록 주의한다. (clear() 같은 메소드로 날릴 수도 있다.) Map 인스턴스를 공개 API의 인수로 넘기거나 반환 값으로 사용하지 않는다. 학습 테스트 외부코드를 이용할 때는 곧바로 우리쪽 코드에 반영해서 구현부터 하지말고 테스트부터 하자. (= 학습테스트) 학습 테스트에 드는 비용은 없다. 어쨌든 API를 배워야 한다. 오히려 필요한 지식만 확보하는 손쉬운 방법이다. (이해도를 높여주는 정확한 실험) 아직 존재하지 않는 코드사..
오류 코드보다 예외를 사용하라 오류 코드를 확인하는 방법은 호출자 코드를 복잡하게 만든다. (if result == YES.. 따위) 함수를 호출한 즉시 오류를 확인해야 하기 때문이다. 오류가 발생하면 예외를 던지는 편이 낫다. => 호출자 코드가 더 깔끔해진다. 논리가 오류 처리코드와 뒤섞이지 않는다. 미확인 예외를 사용하라 (RuntimeException 같은) 확인된 예외는 하위 단계에서 코드를 변경하면 상위 단계 메서드 선언부를 전부 고쳐야 한다. 최하위 함수를 변경해 새로운 오류를 던진다 -> 선언부에 throws 절 추가 -> 연쇄 수정 발생 결과적으로 최하위 함수에서 던지는 예외를 알아야 하므로 캡슐화가 깨진다! 예외에 의미를 제공하라 호출자를 고려해 예외 클래스를 정의하라 외부 API를 사..
지나가다 본 문제인데 호기심이 생겨 풀어보았다. 문제는 다음과 같다. 개미수열? http://navercast.naver.com/contents.nhn?rid=22&contents_id=2322 출처 : https://www.facebook.com/photo.php?fbid=718742614882121&set=gm.870169196356951&type=1 '읽고 말하기 수열' 이라고 부르는 것같은데 바로 위에 있는 수가 몇 개인지 쭈-욱 나열하는 것이다. 111 (1이 1개)12 (1이 2개)1121 (1이 1개 2가 1개)... C, Python, Java로 각각 풀어보았다. 1. C (재귀) #include #include const int MAX_DEPTH = 10; int getLength(cha..
본 포스팅에서는 톰캣로그를 수집하는데 ELK를 적용한 내용을 기술합니다. 소개 수 많은 서버가 있는 환경에서 모든 서비스가 제대로 동작하는지 확인하기 위한 방법으로 로그 수집은 의미가 있습니다. ELK는 로그수집에 적합한 솔루션으로 로그 수집부터 시각화까지 모든 것을 해결해주죠. ELK는 Elasticsearch + Logstash + Kibana의 조합으로 흔히 ELK Stack이라고 부릅니다. 로그 수집에 ELK를 적용할 때 각 모듈의 기능은 다음과 같습니다. Elasticsearch: 로그 저장소Logstash: 로그 수집기/처리기 Kibana: 수집된 데이터 시각화 여기에 Redis를 끼워넣는 등 다양하게 확장이 가능합니다.(확장과 관련된 포스팅: http://www.ianunruh.com/201..
객체와 자료- 객체는 비공개 자료를 가지고 있고, 자료를 제어하는 함수를 제공- 자료는 공개 변수만을 가짐 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다.인터페이스나 조회/설정 함수만으로는 추상화가 이뤄지지않는다.개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다.아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다. 객체와 자료구조는 근본적으로 양분된다.- 객체지향 코드에서 어려운 변경은 절차적인 코드에서 쉽다. (기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다!)- 절차적인 코드에서 어려운 변경은 객체 지향 코드에서 쉽다. (기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다!) => 다형성을 이용한 경우 interface에..