본문 바로가기

개발 관련78

멀티쓰레드에서 Thread-Safe 방법 1. 멀티 쓰레드(Multi Thread)란? 1-1) 정의 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고, 자원의 생성과 관리의 중복성으 최소화하여 수행능력을 향상시키는 것 하나의 프로그램에 동시에 여러개의 일을 수행할 수 있도록 해주는 것 1-2) 멀티 프로세스와의 차이점 멀티 프로세스 : [데이터, 힙, 스택] 영역 모두 비공유 멀티 쓰레드 : [데이터, 힙, 스택] 영역 중 스택만 비공유 2. 쓰레드 세이프 방법 쓰레드를 사용하는 환경에서 성능을 높이기 위해서 멀티 쓰레드를 사용하지만, 힙과 데이터영역은 공유하기 때문에 쓰레드 간에 safe 하지 못하게 됩니다. 1) Synchronized private Integer count = 0; synchronized (count) { c.. 2022. 7. 14.
orElse 와 orElseGet 무슨 차이가 있을까? Java 8을 쓰면서 null 에 대한 처리를 위해서 Optional 을 많이 쓸 텐데요. 저도 꽤 즐겨 쓰는 편입니다. (보통 null 을 반환하는 로직을 짜고 싶지 않겠지만, 그게 항상 마음대로 되지는 않잖아요..) 또한 적절하게 쓰면 코드 길이를 줄여 한 줄로 가능하다는 장점도 있고요. Optional 에는 orElse() 라는 메소드와 orElseGet() 이라는 메소드가 있는데요. 둘 다 Optional 을 통해 가져온 값이 null 일 때는 해당 값을 반환하라는 메소드 입니다. 최근에 관련 메소드를 쓰다가 전혀 생각지도 못한 곳에서 에러가 나서 재배포를 한 기억이 있는데요. (핫픽스를 통해 재배포를 했습니다. 하하..) 그러면 좀 더 잘 알고 사용하여, 다음엔 같은 에러를 발생시키지 않도록 정.. 2022. 7. 14.
SimpleJdbcInsert 문제 이전 jdbcTemplate 를 설명하면서 simpleJdbcInsert 에 대한 칭찬(?)을 했었다. @Override public Long saveLoginUI(final LoginVO loginVO) { KeyHolder keyHolder = new GeneratedKeyHolder(); jdbcTemplate.update(new PreparedStatementCreator() { @Override public PreparedStatement createPreparedStatement(final Connection connection) throws SQLException { PreparedStatement statement = connection.prepareStatement("insert into.. 2022. 7. 14.
DB Insert 시 자동생성된 id 를 알아내기 DB Insert 시 자동생성된 id 를 알아내기 1.Mybatis INSERT INTO student ( name, grade, phone ) VALUES ( #{name}, #{grade}, #{phone} ) 사용하는 데이터베이스가 Auto Increment 가 된다면 (e.g. MySQL, Maria) 다음을 통해 id 를 알아낼 수 있다. StudentDTO student = StudentDTO.builer(). .name("snack") .grade(1) .phone(01011112222) .build(); mapper.insertStudent(student); student.getId() // get ID 2. KeyHolder 를 사용한 방법 MyBatis 를 사용하지 않고, jdbcTem.. 2022. 7. 14.
SpringBoot Actuator 1. Spring Boot Actuator 일단.. 생소한Actuator 이란?? An actuator is a manufacturing term that refers to a mechanical device for moving or controlling something. Actuators can generate a large amount of motion from a small change. 물건을 움직이거나 컨트롤하기 위한 장치를 의미하는 제조 용어로, 작은 변화로 큰 변화를 일으킬 수 있다. 앱을 모니터링 하거나 메트릭을 수집하거나 트래픽 혹은 데이터 베이스 상태를 이해하는 것을 쉽게 하는 것 설명만 봐선 알듯말듯하게 모르겠고, 정리를 하는 시점에도 딱 이거다! 하고 떠오르질 않네요. 모든 내용은.. 2022. 7. 14.
WireMock 사용 순서가 어긋난 감이 있긴 하지만, 지난 번 API 통신을 위해 Feign 을 사용했었는데, 테스트를 진행할 때 실제로 API 접속을 할 수는 없으니 Mock Web 서버를 만드는 기술인 WireMock 를 사용한 내용을 올리고자 한다. WireMock 이란? HTTP-based API를 위한 시뮬레이터 Mock 으로 만드는 웹서버 http://wiremock.org/ 1. 의존성 추가 Maven 을 사용하므로 pom.xml 에 의존성 추가 com.github.tomakehurst wiremock-jre8 2.24.1 test 2. 테스트 코드 작성 public class Test { @Rule public WireMockRule wireMockRule = new WireMockRule(8089); // .. 2022. 7. 14.