전체 글
-
[Java] 쓰레드 스택, 힙 영역, 쓰레드 로컬JAVA 2024. 11. 24. 20:48
쓰레드 동시성 공부를 하면서 쓰레드 로컬과 스택, 힙 영역의 차이가 궁금하여 정리해보았다. 쓰레드 스택스택영역은 각가의 쓰레드 가지는 별도의 메모리 공간이다.쓰레드가 생성되면 스택 영역을 부여 받고, 실행시 run() 메서드가 스택 영역에 쌓이게 된다.스택에는 쓰레드가 메서드를 실행할 때 메서드 프레임이라는 형태로 쌓이게 되는데,이 메서드 프레임에는 호출한 메서드를 가지고 있는 인스턴스의 주소값과 메서드에서 사용되는 지역변수가 저장된다.쓰레드 간에 지역변수는 절대로 공유되지 않는다! 호출한 메서드를 가지고 있는 인스턴스의 주소값? 이 무엇일까?이 부분이 헷갈렸는데, 예시를 들어 살펴보자.// MyRunnable 은 Runnable의 구현체이다Thread t1 = new Thread(new MyRunna..
-
[디자인 패턴] 싱글톤 패턴 타파 및 대응 방안JAVA/GoF 디자인 패턴 2024. 4. 8. 23:41
1.static 메서드와 private 생성자 방식 자바에서 싱글톤 패턴을 처음 배우는 방식이다. public class Settings { private Settings() {} private static Settings instance = null; public static Settings getInstance() { if(instance == null) { instance = new Settings(); } return instance; } } 하지만 이 방법으로 싱글톤을 설계하게되면 쓰레드 safe하지 않게 된다. 예를 들어 쓰레드 A와 B가 거의 동시에 Settings의 getInstance()에 접근했다고 생각해보자. A가 처음 getInstance()를 접근했을 때 instance는 null..
-
[SVN] 이클립스에서 충돌 났을 때 해결SVN 2023. 12. 14. 15:46
SVN에서 로컬과 원격파일이 달라서 충돌나는 경우가 있다. 이럴때 두 가지 옵션을 선택할 수 있다. 첫 번째는 Override and commit, 두 번째는 Override and update이다. Override and commit은 로컬 파일 -> 원격 시키는 것으로 원격 파일 내용이 없어지고, 로컬 파일이 최신 상태로 SVN에 업데이트된다. Override and update은 원격 파일 -> 로컬 시키는 것으로 로컬 파일 내용이 없어지고, 원격 파일이 최신 상태로 SVN에 업데이트된다. 이클립스에서 SVN 충돌이 났을 때 충돌 파일을 확인하는 방법은 아래와 같다. 파일 오른쪽 클릭 > Team > Synchronize with Repository 이클립스 하단에 충돌난 파일을 확인할 수 있고 상..
-
[Spring] ajax로 form 데이터 serialize() 전송하여 controller에서 객체로 받기/ajax로 json 데이터 전송하여 controller에서 객체로 받기(@RequestBody)JAVA/Spring(Springboot) 2023. 7. 22. 21:33
ajax로 데이터를 전송하여 controller에서 데이터를 받는 방법에 대해 알아보겠다. 데이터를 ajax로 넘길때 form 데이터를 serialize() 해서 보내는 방식이 있고 json으로 데이터를 전송하는 방식이 있다. 이 두가지를 코드로 살펴보자. 우선 form에 있는 데이터를 전부 보내는 방식을 살펴보자. html 카테고리명 활성화 html 코드이다. form에서 input 태그로 넘어갈 값들은 name(카테고리명), isDel(활성화여부) 이다. 등록 버튼을 클릭하면 createCategory() 함수가 실행된다. javascript function createCategory() { // 이름이 중복인지, 유효성 확인 $.ajax({ url: '/admin/category/create', d..
-
[Querydsl] transform 함수 작동 X프로젝트/미해결 2023. 6. 7. 09:21
spring boot 3.x 로 업그레이드하고 hibernate 버전은 6.2.2 로 세팅 후 querydsl 을 사용하여 코드를 작성하고 있었다. 간단한 select 문은 잘 작동되었으나 transform(groupBy().list()) 기능을 사용하려 했더니 java.lang.NoSuchMethodError: 'java.lang.Object org.hibernate.ScrollableResults.get(int)' 이런 오류가 나왔다.... 아직 hibernate 홈페이지에도 qna를 올려놓았고 인프런에도 올려 놓았다. 답변을 기다려 보자. https://discourse.hibernate.org/t/hibernate-6-2-2-querydsl-5-0-0-transform-function-is-not..
-
[Querydsl] Q Entity 생성시 javax.persistence.Entity 오류 해결 법JAVA/Spring(Springboot) 2023. 5. 30. 15:46
Querydsl 을 사용할 때 Q Entity 생성시 (compileQuerydsl 실행시) javax.persistence.Entity 오류가 발생하는 경우가 있다. 이때 build.gradle 에 querydsl 의존성을 수정해주면된다. querydsl 의존성 추가 코드에 ":jakarta" 를 추가해주면 된다. buildscript { ext { queryDslVersion = "5.0.0" } } dependencies { // querydsl 추가 implementation "com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta" annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jaka..
-
[Css] css 남는 공간 채우기: flexcss 2023. 5. 4. 11:49
사진과 같이 부모 div(container) 안에 자식 div(Left_div, Right_div) 를 빈 공간 없이 꽉 채워서 그리고 싶을 때가 있다. 이때 css 속성의 flex를 사용하면 된다. 코드로 한 번 살펴보자. html code css code .container { display: flex; } .Left_div { width: 300px; } .Right_div { flex: 1 0 auto; } 부모 요소인 container에는 flex 속성을 부여하였고, 빈 공간을 채울 Right_div에는 flex: 1 0 auto; 속성을 부여하였다. 이 예시는 가로로 꽉 채우고 싶을 때 사용가능하며 세로로 꽉 채우고 싶을 때는 다른 방법으로 해야하는 것 같다...
-
[Spring] QueryDsl 페이징 쿼리 사용법JAVA/Spring(Springboot) 2023. 4. 8. 23:13
QueryDsl로 페이징 쿼리를 작성할 때 count 쿼리를 분리해서 사용하면 성능이 개선되는 경우가 있다. count 쿼리를 분리해서 작성하는 법을 알아보자. 우선 return 타입으로 PageImpl 방식과 PageableExecutionUtils.getPage 방식이 있다. PageImpl 방식은 totalCount를 구하는 쿼리를 무조건 실행하게 되지만, PageableExecutionUtils.getPage 방식은 필요한 경우에만 totalCount를 실행하게 할 수 있다. totalCount 쿼리 실행이 필요없는 경우는 생략해서 처리한다. - 페이지 시작이면서 컨텐츠 사이즈가 페이지 사이즈보다 작을 때 - 마지막 페이지일 때 (offset + 컨텐츠 사이즈를 더해서 전체 사이즈 구함) 코드를 ..