본문 바로가기

Programing

(403)
[Spring] 스프링 프레임워크 개요 레퍼런스: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/overview.html#overview 스프링은 자바 엔터프라이즈 애플리케이션들을 작성하기 쉽게 해준다. 1. Spring 이라는 의미? 문맥에 따라 다양한 의미로 사용된다. 1. Spring Framework 프로젝트 그 차제 2. 프로젝트들의 모든 계층 레퍼런스에서는 1번을 의미 스프링 프레임워크는 여러 모듈들로 나뉘어 짐. 핵심을 설정 모델과 의존성 주입 매커니즘을 포함한 core container임. 이것을 넘어, 프레임워크는 메시징, 트랜잭션 데이터, 퍼시스턴스, (Spring MVC, Spring WebFlux) 웹 등의 애플리케이션 지원을..
[Swift] 스탠포드 강좌 again 주말에 뭐 할까 하다가... (물론, 빨래, 청소, 종량제 쓰레기 폐기, 설거지 등 하고 아이 점심에 재우고 나서..) 전에 듣던 스탠포드 강좌가 생각났다. 그 당시 Developing iOS 8 App with Swift 라는 제목의 강좌였다. 한국어로도 번역이 되어 있었는데 한글링이라는 그룹에서 번역을 해주었다. 이 자료는 http://hangling.org 에도 있고, 인프런에도 올라와 있다. 다만, 결국 YouTube에 올려져있는 영상이다. 전에 듣던 팟캐스트를 찾다보니 Developing iOS 11 App with Swift 이라는 이름으로 2017년 11월 발매가 되어 있었다. Xcode는 새로운 버전이 나올 때마다 버튼을 한참을 찾아야 하기 때문에 가능한 최근 버전의 강좌와 맞추는 것이 좋..
ThreadLocalRandom and Random ThreadLocalRandom 자바7에서 추가된 기능중에 ThreadLocalRandom 가 있다. 스레드 별로 난수 생성을 고립시키는 랜덤 클래스이다. java.lang.Math#random 처럼 ThreadLocalRandom 역시 내부에 고정된 holder를 통해 난수를 생성한다. 문제는 멀티스레드에서 이 메서드를 사용할 경우 적절하게 동기화를 시켜야하는데, 많은 수의 스레드가 난수를 생성하려고 할 경우 각자의 랜덤 생성기를 가지게 하는 방법을 통해 서로간의 경합으로 인해 성능이 떨어지는 것을 방지하라고 주석에 적혀있다. ThreadLocalRandom 의 경우 current() 라는 정적 메서드를 통해 객체를 얻도록 되어 있다. public static ThreadLocalRandom curre..
[테스트] 테스트 코드의 회의 어제 버전 18이 배포를 나갔다가 3시간 만에 롤백이 되었다. 이번에 새로 추가된 버전은 심지어 테스트 커버리지가 100%였다. 그런데 배포를 하고 나서 로컬에 새로운 기능 추가를 하는데 이상하게 동작하는 현상이 확인되었다. history성 row가 추가되는데 마지막 row가 아닌 이전 row가 업데이트되는 문제였다. 원인은 기존의 엔티티에서 새로운 엔티티를 만들어서 값을 저장(insert)하고 업데이트(update)를 하는데, 예외가 발생하면 기존의 엔티티에 업데이트를 하는 버그가 있었다. 급하게 롤백을 하고 영향도를 파악하는데 다행히 production 환경에서는 예외가 없었는지 데이터가 꼬이지 않았다. 전에 N모 피처에서는 테스트 코드가 버그를 피하는데 도움을 주었는데 이번에는 해당 로직에 대한 체..
[macOS] Trim force 명령 El Captain 이후 (Sierra, High Sierra 포함) 에는 SSD의 트림을 강제로 활성화할 수 있는 옵션이있다. 처음 SSD를 설치하면 아래와 같이 TRIM 지원이 아니요로 나온다. 터미널을 띄워서 trimforce 를 쳐보면 아래와 같이 가능한 목록이 나온다. 활성화하는 명령은 아래와 같다. sudo로 super user로 실행(do) 한다. $ sudo trimforce enable 중간에 아래와 같은 경고 문구가 나온다. 모든 책임은 너가 진다 라는 동의를 하라는 것이다. ...더보기 IMPORTANT NOTICE: This tool force-enables TRIM for all relevant attached devices, even though such devices may n..
[Spring] MockRestServiceServer를 이용한 RestTemplate 테스트 스프링에서는 이제 웹 클라이언트를 RestTemplate 대신 WebClient를 쓸 것을 이야기하고 있지만 아직 계속 쓰고 있다. 기능 테스트 코드를 작성하려고 한다. 결국은 클라이언트 코드는 RestTemplate을 주입받을 것인데, 테스트 코드에서 해당 요청을 Mocking을 할 수 있게 해주어야 한다. 스프링 프레임워크 스프링 프레임워크에서는 MockRestServiceServer 를 제공한다. 처음에 3.2.x 버전의 JavaDoc을 참고했다. 예제가 아래와 같이 되어있다. RestTemplate restTemplate = new RestTemplate() MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemp..
[Docker] Unable to find image 해결책 에러 메세지 $ docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube Unable to find image 'sonarqube:latest' locally docker: Error response from daemon: Get https://registry-1.docker.io/v2/library/sonarqube/manifests/latest: unauthorized: incorrect username or password. See 'docker run --help'. 시도 Docker Update 업데이트 할 때 권한에 대한 확인 창이 뜬다. 하지만 마찬가지이다. Troubleshoot 진단 성공 딱히 도움이 되지 않는다. 원인은.....
[SonarQube] 메이븐(Maven) 프로젝트에서 커버리지 표시하기 Gradle 방식 내가 개발하던 팀은 주로 그레이들(Gradle)을 사용했다. 그래서 org.sonarqube 라는 이름의 플러그인을 사용해서 SonarQube 리포팅을 했기에 특별한 설정은 프로퍼티 정도만 추가로 해주었다. 그래서 build.gradle 에 아래와 같이 플러그인 DSL 만 명시해주면 ./gradlew sonar 라는 태스크를 이용해서 리포팅이 가능했다. plugins { id "org.sonarqube" version "2.7.1" } sonarqube { properties { property "sonar.projectKey", "${artifactName}" property "sonar.projectName", "${artifactName}" property "sonar.source..