728x90
반응형

Java 58

아들에게 프로그래밍 간단하게 설명한 이야기...

어제 밤에 왠일로 아들놈이 먼저 '아빠... 프로그램 좀 알려 주세요.' 라고 이야기를 한다. 그 동안 학교에서 Java, Python, Kotlin 등을 배운다고 하던데... 왜 아빠에게 다시 물어볼까 궁금했지만, 궁금함을 뒤로 하고 일단 기초부터 알려 주려고 맘을 먹고 PC를 켰다. 개발자의 습관 답게 자동으로 새로 산 PC에 intellij를 깔고, 30일 무료니까 일단 실행해 보자 하고 실행을 했다. 막상 HelloWorld 부터 하려 하니, 이러면 안 되겠다는 생각이 들어, 아들보고 종이와 볼펜을 가져오라고 했다. 종이와 볼펜에 기본적인 http의 호출과 응답에 대한 설명을 이어 나간다. Client는 가계에 들어온 고객이고, Web 서버는 매장 서빙을 하는 직원, WAS 서버는 요리사 라고 어..

Reflection 사용2

Reflection이란 무엇인지, 그리고 기본적으로 어떻게 접근 가능한지 아래의 포스팅에서 다루었다. 2021.06.25 - [Java] - Reflection Reflection 리플렉션에 대해 정확하게 무엇이다라고 정의 내리기가 쉽지 않다. 명확하게 캡슐화를 하여 접근하지 못하도록 정의 된 생성자를 포함하여 멤버변수라던가 메소드에 접근 가능하도록 해 주는 www.4te.co.kr 2021.06.25 - [Java] - Reflection 사용1 Reflection 사용1 2021.06.25 - [Java] - Reflection 에서 Reflection 이란 무엇인지, 그리고 왜 사용하는지, 어디에서 사용 되는지 등을 확인해 봤다. 이번 포스트에서는 실제로 Reflection을 직접 사용해 보고 어떻..

Java 2021.06.29

Reflection 사용1

2021.06.25 - [Java] - Reflection 에서 Reflection 이란 무엇인지, 그리고 왜 사용하는지, 어디에서 사용 되는지 등을 확인해 봤다. 이번 포스트에서는 실제로 Reflection을 직접 사용해 보고 어떻게 동작하는지 확인해 보자. 먼저 테스트를 위한 Class를 작성하자. package com.example.demo.reflection; public class A { private String ps1 = "aaa"; private String ps2; public String ps3; private A() { System.out.println("this is empty arg constructor"); } private A(String ps2) { this.ps2 = ps2..

Java 2021.06.25

Reflection

리플렉션에 대해 정확하게 무엇이다라고 정의 내리기가 쉽지 않다. 명확하게 캡슐화를 하여 접근하지 못하도록 정의 된 생성자를 포함하여 멤버변수라던가 메소드에 접근 가능하도록 해 주는 기능이라고 정의하면 될려나 모르겠다. 원래는 접근하지 못하는 코드에 어떻게 접근하는 것일까? Reflection 이란 말 처럼 Heap 메모리에 올라간 Instance를 투영하여 실제 Class가 어떻게 생겼는지 확인하는 방법으로 접근한다고 한다. 내부적으로 정확하게 어떻게 구현 되어 있는지 알 수 없지만 ^^ 그런데 이러한 기능은 코드를 통해 접근하지 못하도록 의도를 가지고 만든 코드를 오히려 망치는 기능일수도 있는데 왜 존재하는 것일까? Reflection이 사용된 대표적인 코드는 바로 Spring Framework의 DI..

Java 2021.06.25

Java Random 함수의 동작 원리

회사 내 스터디에서 다음의 책을 가지고 하고 있는데 쉬운 내용이지만 중간 중간 알게 되는 흥미로운 내용이 있어서 기록한다. http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&barcode=9791163030072 Do it! 자료구조와 함께 배우는 알고리즘 입문: 자바 편 - 교보문고 엄선된 88개의 실습 예제와 93개의 연습 문제! | IT 기업 시험, 면접 필수 역량인자료구조와 알고리즘의 기초를 100% 담아낸 책!IT 기업 코딩 면접, 필기 시험에서 당황하지 않으려면?눈으로 읽고 손 www.kyobobook.co.kr 일단 알게 된 내용은 2장에 나오는 Random 함수이며 Random 함수는 진짜 랜덤이 아니라는 것이다. 코드 내에서 ..

Java 2021.05.14

JUnit Test Code에서 Slf4j logger 이용하기

그 동안 JUnitTest Code에서 @Slf4j 어노테이션을 이용해 로거를 사용하려 하면 다음과 같은 오류가 발생 했었다. 그냥 무슨 이유가 있는가 보다 하고 그냥 System.out.println을 사용 하였는데, 갑자기 궁금함에 검색해 보니 stackoverflow 에 이미 답이 있더라. stackoverflow.com/questions/29076981/how-to-intercept-slf4j-with-logback-logging-via-a-junit-test How to intercept SLF4J (with logback) logging via a JUnit test? Is it possible to somehow intercept the logging (SLF4J + logback) and ..

Java/Spring 2021.04.01

Java 기본 내용을 위한 북마크

Memory, GC yaboong.github.io/java/2018/05/26/java-memory-management/ 자바 메모리 관리 - 스택 & 힙 개요 Java 에서 메모리 관리는 어떻게 이루어지는지 알아보기 위함. Stack 과 Heap 영역 각 역할에 대해 알아본다. 간단한 코드예제와 함께 실제 코드에서 어떻게 Stack 과 Heap 영역이 사용되는지 살펴 yaboong.github.io yaboong.github.io/java/2018/06/09/java-garbage-collection/ 자바 메모리 관리 - 가비지 컬렉션 개요 Java 가비지 컬렉션에 대해서 공부한 내용을 정리해본다. Java 에서 메모리 관리는 어떻게 이루어지는지 이해하고 있으면 좋다. 자바 메모리 관리 - 스택 &..

Java 2021.01.28

Reative 관련 북마크

www.reactivemanifesto.org/ko 리액티브 선언문 탄력성(Resilient): 시스템이 장애 에 직면하더라도 응답성을 유지 하는 것을 탄력성이 있다고 합니다. 탄력성은 고가용성 시스템, 미션 크리티컬 시스템에만 적용되지 않습니다. 탄력성이 없는 시 www.reactivemanifesto.org woowabros.github.io/experience/2019/03/18/tech-toby-reactive.html 3월 우아한 Tech 세미나 후기 - 우아한형제들 기술 블로그 스프링 리액티브 세미나 후기 woowabros.github.io devahea.github.io/2019/04/21/Spring-WebFlux%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%A..

Java/Reactive 2021.01.27

테스트 코드 작성 시 willReturn 값이 안나오는 경우

오랜만에 테스트 코드를 작성하기 위해 구글링 해서 작성을 했는데 내가 짜 놓은 시나리오대로 동작을 하지 않아 더 구글링, 그리고 주변에 사람들에게 질문을 하였지만.... 해답은 안 보였다. 작성한 테스트 코드는 아래와 같다. import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springf..

Java/Spring 2020.12.02

멀티 DataSource 접속 방법 정리

한 개의 프로젝트에서 하나의 Database에만 접속하는 경우가 대부분이지만, 2개 이상의 데이터 베이스에 접속하는 경우도 발생하게 된다. 이럴 경우 어떻게 셋팅을 해야 하는지 정리한다. application.yml 설정파일 spring: profiles: active: local application: name: usercms application-local.yml server: port: 9090 spring: profiles: local domain: localhost datasource-a-write: driverClassName: com.mysql.cj.jdbc.Driver jdbcUrl: jdbc:mysql://a-db-url:3306/a?autoReconnect=true&useSSL=fals..

Java/Spring 2019.08.13

QueryDSL 사용하기

JPA를 사용하면서 QueryDSL을 셋팅하고 사용하는 부분에 있어서 매번 헷깔려 정리한다. QueryDSL을 사용하기 위해서 build.gradle 파일에 아래의 내용을 추가 해 준다. plugins { ... id 'idea' id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' ... } dependencies { ... implementation 'com.querydsl:querydsl-apt:4.1.4' implementation 'com.querydsl:querydsl-jpa:4.1.4' ... } ext { querydslSrcDir = 'src/main/generated' queryDslVersion = '4.1.4' } configuratio..

Java/Spring 2019.08.08

파라미터에 따라 특정 변수에 값 Set 하기

Java로 Entity를 만들고 멤버 변수로 1 ~ 31일을 만들어 둔 다음 넘오는 날짜에 따라 특정 날짜 변수에 값을 담는 작업을 하다 알게 된 내용이다. 역시 새롭게 알게 된 내용이라 정리 차원으로 올린다. MontTimeTable Entity는 아래와 같다. @Entity @EntityListeners(value = {AuditingEntityListener.class}) @Data @Table(name = "month_timetable") public class MonthTimetable { @Id @Column @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column private Integer policy_inst..

Java/Spring 2018.10.24

JPA QueryDsl 에서 Group By Count 값 가져오기

JPA, QueryDsl 쓰기 참 힘들다. 그래도 하나 하나 어렵게 해 나가고 있는데 오늘은 또 Group By한 Count 개수를 반환하는 것을 만든 삽질 내용을 올린다. 리파지토리 단 소스는 아래와 같다. @Override public QueryResults getBusinessTotalCount() { QUser user = QUser.user; return from(user).where(user.userType.eq(UserType.B2B)).groupBy(user.platform).select(user.platform, user.platform.count()).fetchResults(); } 그리고 가지고 온 내용을 가지고 맵으로 이쁘게 정렬해서 반환해 주면 된다. public Map getBu..

Java/Spring 2018.09.28

캐릭터셋에 대한 고민...

회사에서 sms 발송 시 특정 문자가 깨져 나가는 문제가 발생...sms 발송 시스템은 "세X 텔레X"을 사용 하는데 특정 DB에 값을 넣어 두면 jar로 실행 되는 데몬이 해당 DB 값을 읽어서 발송 하는 방식임.DB에 값이 들어갈 때까지 UTF-8 형식이고 깨지지 않고 들어가는데, 실제 폰에서 받아 보기만 하면 깨지는 상황.깨지는 문자는 "–" 임. 일반 키보드에서 치는 "-"와는 다르고, 워드나 한글 등에서 copy & paste 한 것으로 보임.실제 폰에서 받아 볼 경우 해당 문자는 "?"으로 치환 되어 옴. 해당 현상을 재현 하기 위해 php에서 테스트 해 보았으나 재현 안되고Java에서는 아래와 같은 방식으로 재현 됨. 콘솔에 찍힌 결과 값은 아래와 같음.euckrString : 201? 21..

Develop! 2018.03.21

Java8의 for, stream foreach, parallelStream foreach 간단 속도 테스트

Java8에 들어간 stream, parallelStream이 좋다는 이야기만 듣고 대충 개념만 이해한 상태에서... "그냥 좋겠지"란생각으로 쓰려다... 간단하게 테스트 해보고 정리 ^^ 참고로 로컬 PC에서 돌렸으며, 로컬 PC의 물리 cpu 코어 개수는 4개이다. import java.util.ArrayList; import java.util.List; public class StreamTest { public static void main(String[] args) throws InterruptedException { List intList = new ArrayList(); // 테스트할 loop의 개수... for (int i = 0; i { if(integer % 1000 == 0) { Sys..

Java 2017.02.14

원격지의 이미지 파일을 읽어서 원하는 곳에 업로드 하기

보통 개발 시에 파일 업로드를 하려 하면 html form에서 multipart/form-data로 파일을 선택해서 업로드 하고, 이를 서버 단에서 받아 처리를 하게 된다. 하지만 이런 방법이 아니라 원격지의 이미지 파일을 읽어온 후 필요 시 리사이지, 그리고 나서 다시 다른 곳에 있는 서버로 파일을 업로드 하는 기능이 필요해 개발을 하다 보니, 많이 사용되는 방법이 아니기에 정리해 둔다. import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.net.URL; import java.nio.file.Files; impor..

Java 2017.02.09

이미지 파일 업로드 오류 수정 기록...

구매후기 이미지 업로드에서 오류가 나고 있어서 해당 내용을 검토 중에 알게 된 내용을 정리합니다. 기본적으로 아래와 같은 방식으로 업로드가 되고 있습니다. 브라우저 -> php -> Java 그런데 문제는 어느 한쪽의 문제가 아니라 php, Java 둘다 문제가 발생... 그리고 문제의 원인은 둘다 Version Up이였습니다. 1. 먼저 Java Error Message가 "Required MultipartFile parameter 'file' is not present" 라고 발생. 구글링 하니 http://stackoverflow.com/questions/25830503/spring-mvc-http-status-400-required-multipartfile-parameter-file-is-not-..

Java/Spring 2016.11.08

Spring Batch(스프링 배치)에서 작업 시간이 길어지는 경우

Spring Batch를 그닦 많이 써본 경험이 없지만, 특정 요구 사항이 있어서 개발하게 되었습니다.작업을 하면서 겪은 오류를 어떻게 해결 했는지 History 및 Backup을 위해 적어 둡니다. 보통 배치는 Reader와 Writer로 구분합니다.특정 정보를 Reader에서 읽어 들여서 필요한 내용을 가공하고 Writer에서 필요한 행동을 합니다. 그런데 Reader에서 정보를 읽어 들이고 가공하는 시간이 오래 걸리면서 Writer에서 DB Connection을 못 찾게 되고, Writer 작업을 수행하지 못하게 되는 경우가 발생했습니다. 구글링을 한 결과 "autoReconnect 값을 true로 해라", "validationQuery를 날려라" 등등이 나왔지만 유효하지 않은 해결책이였습니다. 결..

Java/Spring 2016.10.27

List에서 특정 요소 제거하기

List에서 불필요한 item을 제거하기 위해 loop를 돌리게 되면 제거 후 size가 맞지 않는 일로 인해 null point exception을 만나기가 쉽다. 이럴 경우 제대로 된 방법이 무엇인지는 모르지만... 실제로 돌려보고 Exception이 나지 않은 방법을 찾아 정리 차원에서 남겨 둔다. 검색해서 참고한 URL은 https://stackoverflow.com/questions/17279519/removing-items-from-list-in-java/17279565#17279565?newreg=0dee1db24aaa4154a0cebdc173ed5aeb List toRemove = new ArrayList(); for(Object a: list){ if(a.getXXX().equalsIgn..

Java/Etc 2016.02.11

MySQL의 zero date("0000-00-00 00:00:00") 값이 Date 값으로 넘어오지 않는 경우

MySQL에 DateTime 필드에 값이 없을 경우 기본 값으로 "0000-00-00 00:00:00" 들어가는 경우가 있다. 이럴 경우 쿼리해 온 값이 Java의 Model 객체에 Setter로 값을 넣는 과정에서 에러가 발생한다. 에러 메시지는 다음과 같다. "Cannot convert value '0000-00-00 00:00:00' from column 4 to TIMESTAMP" 뭐 '0000-00-00 00:00:00' 값은 timestamp 값으로 바꿀 수 없다는 메시지 같은데... 이럴 경우 어떻게 해결해야 하나 고민하다가 구글링을 통해 알게 된 내용을 정리한다. 보통 Model 객체의 Setter를 아래와 같이 작성하게 된다. setter에서 Date 객체로 받아야 하는데 값을 넘겨줄 수..

Java 2015.04.06

Spring에서 MessageUtil 사용하기

다국어 사용을 위해서 그동안 Struts2 기반 MessageUtil만 사용하다가 Spring 기반으로 변경하기 위해 구글링, 작업한 내용을 정리 차원에서 올립니다. 1. applicationContext.xml에 다음 내용을 추가 /WEB-INF/messages/messages 2. MessageUtil import java.util.Locale; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.springframework.context.support.MessageSourceAccessor; import org.springframework.web.context.reques..

Java/Spring 2015.02.24

GPS 좌표를 이용한 거리 구하기

구글링을 통해서 GPS의 좌표를 통한 거리 구하는 공식을 어렵게 찾아 적용했다.내용은 아래와 같다. if(oldCoordinate != null) {// TODO 거리 누적...double theta = oldCoordinate.getLongitude() - Double.parseDouble(lp.getLongitude());double dist = Math.sin(Utility.deg2rad(oldCoordinate.getLatitude())) * Math.sin(Utility.deg2rad(Double.parseDouble(lp.getLatitude()))) +Math.cos(Utility.deg2rad(oldCoordinate.getLatitude())) * Math.cos(Utility.deg2r..

Java/Android 2013.07.29

Site-mesh에서 excludes 정의가 적용 되지 않을 경우

Site-mesh의 decorators.xml 파일에서 excludes를 정의해서 사용하려 했지만 여전희 decorator 파일이 적용 되는 상황이 발생했다. 여기 저기 구글링 해 봤지만 내 검색 능력의 한계인가 잘 찾질 못했다. 결국 사내 아는 분에게 문의해서 원인을 알게 되었다. sitemesh.xml decorators.xml /uninstall/* /download/* /intro/* /notice/* /* 위의 decorators.xml에서 uninstall 부분만 decorator를 적용하지 않으려 했지만 처음에는 적용 되지 않았고, 이에 sitemesh.xml의 아래 부분이 추가 되면서 문제가 해결 되었다. 삽질은 정말 해도 해도 끝이 없는거 같다.

Java/Etc 2010.05.14

ActiveMQ 사용하기

실 서비스 도중에 대량의 작업을 동기식으로 작업하려면 부담이 되는 경우가 많다. 이럴 경우에는 비동기식으로 작업을 하게 되는데, 보통 Queue에 작업해야 할 목록을 집어 넣어두고, 나중에 Cosumer가 해당 작업을 하도록 만드는 것이 일반적이다. 이런 작업을 하는데 유용한 도구가 ActiveMQ이며 이번 주소록 프로젝트를 하면서 ActiveMQ를 사용하게 되어 정리차원에서 블로그에 올려본다. 설치하기 이전에 우선 환경을 셋팅해야 한다. JDK는 1.5.x 버젼 이상 설치되어 있어야 하며, " JAVA_HOME" 환경 변수는 JDK가 설치된 경로로 잡혀 있어야 한다. Maven은 1.0.2 이상 설치되어 있어야 한다.(Maven은 소스 설치 또는 개발자 버젼 설치를 위해 필요한 듯...) 또한 관련 J..

Java/Etc 2010.03.23

Java addCookie 삽질기

매일 프로그램 삽질은 하고 있지만 이번 건은 유난히 더 삽질이 길었다. 3일 동안 아무런 일도 못하고 이 일에만 매달렸다. 다른 일을 하긴 해야 하지만, 개발자 자존심에 해결하지 못하고 넘어가기에도 뭐 하고... 결국에는 해결하게 되었지만 아무것도 아닌 원인 때문에 해결하고도 짜증이 난다. 증상은 다음과 같다. package com.naver.widget.action; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.naver.widget...

Java/Etc 2010.03.10

Like 검색에서 wild 문자인 _, % 검색 되도록 하기

프로젝트를 진행하면서 BTS로 _, %로 검색시 검색이 제대로 안된다는 내용이 등록되었다. 해당 내용을 해결하기 위해 구글링 하던 도중 아래와 같은 내용을 찾게 되었다. http://okjsp.pe.kr/seq/2372 '_', '%'와 같은 문자들이 검색을 하기 위한 wild 문자로 사용되지 않고 리터럴 문자로 사용되기 위해서는 뒤에 escape '\' 와 같이 사용해 주어야 한다는 것이다. 즉 다음과 같이 사용하면 되는 것이다. LIKE '%검색어\_\%% escape '\' 사용하고 있는 DB는 CUBRID 였으며, 위와 같이 할 경우 잘 동작 되었다. 위 내용을 수정하면서 SQL Injection 위험이 있던 '%$keyword$%' 부분도 '%#keyworkd#%'로 바꾸게 되었다. 하지만 이 ..

Java/Etc 2009.09.28

스트럿츠를 사용하여 객체 출력하기

일반 프로퍼티 또는 List 타입의 프로퍼티를 출력하는 방법은 이미 살펴 보았다. 프로퍼티가 아닌 객체 자체를 출력하는 경우는 다음과 같이 할 수 있다. struts.xml /chapter2/printObject.jsp example.model.Product.java package example.model; public class Product { private String name; private String modelNo; public Product() {} public Product(String name, String modelNo) { this.name = name; this.modelNo = modelNo; } public String getName() { return name; } public..

Java/Struts2 2009.05.11

스트럿츠를 사용하여 List 출력하기

이번에는 스트럿츠를 사용하여 List를 출력해 보자. 일단 Action 파일과 result 파일 정의를 struts.xml에 정의하면 다음과 같다. /chapter2/printStringList.jsp 위에서 정의한 대로 PrintStringListAction.java 파일을 example.chapter2 패키지에 만든다. package example.chapter2; import java.util.ArrayList; import java.util.List; public class PrintStringListAction { private List listString; public String execute() throws Exception { listString = new ArrayList(); list..

Java/Struts2 2009.05.06

스트럿츠2 설정하기

스트럿츠를 사용하기 위해 스트럿츠 환경을 구축할 필요가 있다. 우선은 이클립스에서 다음과 같이 'Dynamic Web Project'를 하나 생성한다. 그런 다음 위에서 볼 수 있는 것처럼 몇가지 내용을 추가해야 한다. 우선은 필요한 라이브러리를 추가해 보자. http://struts.apache.org/에서 해당 버전을 다운받는다. 현재 시점에서 가장 최신 버젼은 2.1.6이다.(http://struts.apache.org/download.cgi#struts216) 다운 받은 파일의 압축을 풀면 lib 디렉토리에 jar 파일들이 있는데, 그 중에서 필요한 jar 파일들을 추가한다. 추가해야 할 파일 목록은 다음과 같다. antlr-2.7.2.jar commons-beanutils-1.7.0.jar co..

Java/Struts2 2009.04.28
728x90
반응형