반응형

이제 보름 정도 후에 하반기 취업 시즌이 시작된다...

 

이번 년도 상반기 취업 실패 이후 뭔가를 많이 한 것 같지만 뒤돌아 보면 딱히 뭘 해놓은게 없는 것 같아

 

마음이 속상하다...

 

매일매일 스터디 카페에 가서 뭔가를 하지만 사실상 지금 까지 시간과 노력을 투자한 것으로 취업이 

 

성공할 수 있을지 모르겠다...

 

이런 생각 때문에 하루하루 우울감이 느껴지곤 한다.

 

꼭 취업에 성공해서 그동안 먹여주시고 키워주신 부모님께 효도를 하고 싶다..

 

그동안 효도 한번 못 해드린 것 같아서 이런 생각을 하면 눈물이 찔끔~ 할때도 있다 ㅎㅎㅎㅎ

 

다시 마음을 다잡고 남은 기간 후회 하지 않게 열심히 준비하자!!

 

대기업에 못간다 하더라도 낙담하지 말고 열심히 해서 꼭 성공하자!

 

화이팅!!

반응형

'넋두리' 카테고리의 다른 글

쓰린 밤이... 내 삶이 달았으면 좋겠다..  (0) 2021.10.22
에어컨 너무 추웡...  (0) 2019.06.19
반응형

Spring boot 를 학습하던 도중

 

AWS에 올리려다 git에 노출되면 안되는 값이 있어 외부 yml 파일을 만들고

 

application.yml 파일에 include 해서 data를 사용하려 했다.

 

그런데 데이터 주입이 되지 않았다.

 

myval:
	value: hi

이렇게 yml 파일이 설정 되어 있다고 가정 한다.

 

1. static 변수에 주입해서 사용했다

@Value("${myval.value}")
private static String val;

이런 식으로 사용 하였는데 데이터가 주입되지 않았다.

 

기존에 구현했던 클래스는 상수에 값을 때려 박고 그 값을 static 메소드에서 사용하도록 했었다.

 

그 점을 인지 못하고 그냥 변수 부분만 바꾸면 되겠지 하고 사용했지만, 실패!

 

2. static 키워드를 제거하고 new MyClass();와 같이 인스턴스 생성해서 사용했다.

 

@Component
@ConfigurationProperties(prefix="myval")
@Getter
@Setter
public class MyClass{
	private String value;
}

 

new MyClass(); 로 생성해서 value값을 출력하는 메소드를 만들고 호출해 봤지만

 

null 값이 나온다. 실패!

 

3. (2)번 처럼 만든 클래스를 @Autowired로 주입 시켜 사용했다.

public class TestMain{
	
    @Autowired
    private MyClass myclass;
    
    public void test(){
    	myclass.출력메소드();
    }
}

 

yml 파일의 데이터를 사용하는 클래스를 호출하는 곳에서 출력 메소드를 호출해 봤고 성공했다!

 

@Autowired, @Inject, @Resource, @Value 어노테이션들은 스프링의 BeanPostProcessor 구현체가 처리한다. 이는 (무엇이든간에) 자신만의 BeanPostProcessor나 BeanFactoryPostProcessor 타입내에서는 이러한 어노테이션들을 적용할 수 없다는 의미이다. 이러한 타입들은 반드시 명시적으로 XML이나 스프링의 @Bean 메서드를 사용해서 '연결해야' 한다.

 

구글링을 해서 찾아봤지만 위와같은 글만 있고 정확한 원인은 찾을 수 없었다..

 

혹시 왜 그런지 알고 계시면 답변 부탁드립니다~~!

 

그리고 yml 또는 properties 파일에서 값을 읽어오는 Class에는 setter 메소드가 꼭 있어야 한다.!!!!!!

 

--------------------------------------추가--------------------------------

좀 더 알아본 결과 Property 값 주입은 Bean 컨테이너 즉 ApplicationConetxt가 하는데, 서버가 올라가고 ServletContext가 Initialize 되면 onRefresh 메서드에 의해 Bean이 초기화 된다. 이 때 Bean을 스캐닝해서 의존이 있다면 의존을 주입한다. 이 과정에서 플레이스 홀더에 값을 채워주는 것이다!..

그렇기 때문에 임의로 new를 이용해 인스턴스를 생성하게 되면 값 주입이 이루어 지지 않는 것이다.

 

중요한 것은 @Autowired가 아니라 플레이스 홀더가 있는 클래스가 Bean이면서 동시에 context refresh에 의해 처리 되는가 아닌가의 차이이다.

자세한 것은 Spring.io에 Properties 관련 항목을 보면 나와있다.

반응형
반응형
$.ajax({
			type : 'POST',
			url : '/detail',
			dataType : 'json',
			contentType : 'application/json; charset=utf-8',
			data : JSON.stringify(data)
       }).done(function(){...})
         .fail(function(){...})
         .complete(function(){...});

 

async // true(동기) , false(비동기)

비동기 통신 플래그. 기본값은 true (비동기 통신)에서 요청이 던져에서 응답할 때까지 사용자 에이전트는 비동기 처리를 계속합니다. 

false로 설정 하면 통신에 응답이있을 때까지 정지?해 있는다.

 

contentType

서버에 데이터를 보낼 때 사용 content - type 헤더의 값입니다. 기본값은 "application / x - www - form - urlencoded"

 

 

dataType // text, html, xml, json, jsonp, and script.

서버에서 반환되는 데이터 형식을 정한다. 생략했을 경우는, jQuery가 MIME 타입 등을 보면서 자동으로 결정.

"xml": XML 문서

"html": HTML을 텍스트 데이터로. 여기에 script 태그가 포함된 경우 처리가 실행됩니다.

"script": JavaScript 코드를 텍스트 데이터로. cache 옵션 특히 지정이 없으면 캐시가 자동으로 비활성화됩니다. 원격 도메인에 대한 요청의 경우 POST는 GET으로 변환됩니다.

"json": JSON 형식 데이터로 평가하고 JavaScript의 개체로 변환합니다.

"jsonp": JSONP로 요청을 부르고 callback 매개 변수에 지정된 함수 회수 값을 JSON 데이터로 처리합니다. (jQuery 1.2 추가)

"text": 일반 텍스트.

 

 

timeOut

제한 시간 (밀리초)을 설정합니다. $. ajaxSetup 에서 지정한 값을 통신에 따라 개별적으로 덮어쓸 수 있습니다.

 

type // GET, POST, DELETE, PUT

HTTP 통신의 종류를 설정합니다. 기본값은 "GET"입니다.RESTful에 "PUT"또는 "DELETE"를 지정할 수 있지만 모든 브라우저가 지원하는 것은 아니기 때문에주의가 필요

 

complete

AJAX 통신 완료될 때 호출되는 함수입니다. success이나 error가 호출된 후에 호출되는 Ajax Event 입니다.

 

 

beforeSend

AJAX에 의해 요청이 전송되기 전에 불리는 Ajax Event 입니다. 반환값을 false로 설정하면 AJAX 전송을 취소할 수 있습니다.

 

 

error

통신에 실패했을 때 호출되는 Ajax Event 입니다.

-> fail() 로 대체! 

-> ajax (). done (function (data, textStatus, jqXHR) {}); jQuery 1.8에서 더 이상 사용되지 않는 .success () 메서드를 대체합니다. 위의 success 콜백 함수의 대체 구문입니다.

 

success

AJAX 통신이 성공하면 호출되는 Ajax Event 입니다. 돌아온 데이터와 dataType 지정한 값 2 개의 인수를받습니다.

-> done() 로 대체!

-> ajax ().fail (function (jqXHR, textStatus, errorThrown) {}); jQuery 1.8에서 더 이상 사용되지 않는 method .error ()를 대체합니다. 이것은 위의 전체 콜백 함수에 대한 대체 구성입니다.

 

fail() 과 done() 은 success 나 error 보다 정교한 콜백 (callbacks done)을 구현하기 위해 선호되는 방법이다.

반응형

'jQuery' 카테고리의 다른 글

[Bootstrap 모달 jQuery로 닫을 때 이벤트 처리]  (0) 2019.07.25
반응형

 

부트스트랩에서 제공하는 모달을 닫기 위한 방법을 알아보자.

 

먼저 부트스트랩3 또는 부트스트랩4 에서는 다음과 같은 이벤트를 제공한다.

 

hide.bs.modal :이 이벤트는 hide 인스턴스 메서드가 호출 될 때 즉시 시작됩니다. 
hidden.bs.modal :이 이벤트는 모달이 사용자로부터 숨겨지면 시작됩니다 (CSS 전환이 완료 될 때까지 대기합니다).

 

이 메소드를 jQuery에서 사용하는 예시는 다음과 같다.

 

$('#anyModal').on('hidden.bs.modal', function () {
  // something
})

 

이런식으로 사용하면 된다.

 

부트스트랩의 예전 버전인 2.3.2 같은 경우에는 다음과 같은 이벤트를 제공한다.

 

hide :이 이벤트는 hide 인스턴스 메서드가 호출 될 때 즉시 시작됩니다. 
hidden :이 이벤트는 모달이 사용자로부터 숨겨지면 시작됩니다 (CSS 전환이 완료 될 때까지 기다림).

 

$('#anyModal').on('hidden', function () {
    // something
})

 

이상 modal이 닫힐 때 발생하는 이벤트에 대해 알아 보았다.

반응형

'jQuery' 카테고리의 다른 글

[jQuery ajax 정리]  (0) 2019.07.26
반응형

RestController 에서 Josn 형식으로 값을 잘 받아오던게 갑자기 안된다.

No serializer found for class org.hibernate

이런 에러가 나온다.

 

@ManyToOne에서 fetch=FetchType.LAZY 전략을 써서 

Hibernate에서 LAZY 로딩으로 인한 JSON Serialization에러가 발생한 것이라고 한다.

 

그런데 나는 fetch 설정을 한적이 없다..

심지어 @ManyToOne에서 fetch의 default 값은 EAGER 이다

 

default값

OneToMany: LAZY

ManyToOne: EAGER

ManyToMany: LAZY

OneToOne: EAGER

 

해결은

해당 Object를 JSON으로 변환하지 않는다면, @JsonIgnore 어노테이션을 nested 객체에 붙인다

@JsonIgnoreProperties({"hibernateLazyInitializer","handler"})

 

이 방법으로 해결했다..

 

다른 방법으로는 application.properties 에 spring.jackson.serialization.fail-on-empty-beans=false

이 설정을 추가 하면 된다.

 

그런데 에러를 보이지 않게만 하는 방식이라 어떤 위험이 있을지는 모르겠다..

 

반응형
반응형

SpringBoot를 이용해 개발을 하며 test 케이스를 작성하고 실행을 하였다

 

그리고 각 테스트 케이스 마다 영향을 주지 않기 위해

 

@After 어노테이션으로 각 repository.deleteAll() 메소드를 실행하도록 하였다.

 

그런데 ?? 

 

org.hibernate.exception.ConstraintViolationException: could not execute statement

이런 에러가 발생하였다.

 

https://stackoverflow.com/questions/49595852/deleteall-in-repository-randomly-causes-constraintviolationexception

 

deleteAll() in Repository randomly causes ConstraintViolationException

I have tests that do CRUD operations on an API. Before each test the test data in the API gets recreated. Meaning deleting all data in the database and inserting the test data again. public void

stackoverflow.com

여기에 어느정도 잘 나와있는 것 같다.

 

Hibernate를 사용하여 테스트 하는 환경에서 나타나는 일반적인 에러란다~

 

원인은 코드의 쿼리가 순차적으로 즉시 수행되는 것이 아니기 때문이다.

 

그래서 deleteAll() 대신 deleteAllInBatch()를 사용해서 해결했다.

 

deleteAll()은 delete를 여러번 실행하며 모두 삭제하는 것이고, deleteAllInBatch()는 한번의 실행으로 전부를 삭제하는 것이다.

반응형
반응형

 

하아...

 

Entity에 @ManyToOne 어노테이션을 이용해서 참조 관계를 만들고 데이터 저장을 테스트 하던중

 

이상하게도 자꾸 참조키(외래키)의 값이 null 이라고 에러가 뜨면서 저장이 되지 않았다...

 

처어어언천히 Entity의 설정을 살펴보니

 

@JoinColumn(... insertable=false ,updatable=false) 이런 설정값이 들어가 있었다

 

뭐지? 하고 찾아봤는데

 

insertable : 엔티티 저장시 이 필드도 같이 저장한다. false로 설정하면 데이터베이스에 저장하지 않는다. 읽기 전용일때 사용한다.
updatable : 위와 동일한 하지만 수정일때 해당 된다.

 

....

 

그래서 값이 저장되지 않았고 id가 null 이라는 메세지가 자꾸 나온 것이다!!!!

 

하... 

반응형
반응형

Springboot에 댓글 기능을 구현하던 중 이유모를 ? 에러가 발생했다.

 

위와 같이 Query 문을 작성 했는데 

QuerySyntaxException: comments is not mapped [SELECT c FROM comments c ORDER BY c.id DESC]

이런 에러가 발생했다...

 

구글링을 했다... 흑...

 

(http://stackoverflow.com/questions/8230309/jpa-mapping-querysyntaxexception-foobar-is-not-mapped)

스택오버플로우에 명확한 해결법이 나와있었다 ~~ 호우!

 

Query문을 작성할 때는 Table의 대소문자를 주의해야 한다!!

 

즉 도메인 클래스를 작성할 때 @Table(name="comments") 라고 하더라도 

 

도메인 클래스의 클래스명을 테이블명으로 작성해야 한다는 것이다!!

 

즉 나는 Select c FROM Comments 로 했어야 했다.

 

 

반응형

'Spring Framework' 카테고리의 다른 글

JPA 기본 사용법  (0) 2019.06.24
JPA(Java Persistance API) 개념  (0) 2019.06.24
(STS) Spring Framework-Lombok 설치  (0) 2019.06.23
Spring MVC 라이프 사이클  (0) 2019.06.20

+ Recent posts