묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
자바 버전을 다운받고 jdk, sdk 설정을 17이상으로 햇는데 오류가 뜹니다.
스프링강의 입문 강의를 따라 강의를 학습중입니다. java 20 버전으로 설정해 사용중, 설정과 project structure에 sdk, jdk를 모두 20버전으로 설정하엿습니다. 하지만 화면 과 같은 오류가 떠서 자바 버전을 찾을 수 없다고 하는데. 혹시 어떻게 해결해야 하나여? 밑에는 버전사진입니다.
-
미해결
SPRINGBOOT 문제
SPRINGBOOT 세팅이 너무 어려워요
-
미해결
@Builder 사용 질문
@Builder 어노테이션 사용 관련해서 질문이 있어 글을 작성하게 되었습니다.@Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor @Builder public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; // Properties private String name; } 위와 같이 @Entity 클래스 단에서 @Builder 어노테이션을 사용할 때, @NoArgsConstructor 와 @AllArgsConstructor 를 사용해야 하는 것으로 알고 있습니다. 이와 관련해서 질문을 작성하겠습니다!@Entity 와 @Builder 만 사용했을때에 에러가 발생합니다. "이는 @Entity 어노테이션을 사용했을때, 해당 클래스에 아무런 생성자가 없다면 @Entity 가 기본 생성자를 생성해줍니다." 라고 이해했는데 맞나요?그렇다면 @Entity와 @Builder 를 사용하고, @AllArgsConstructor를 사용하면 기본 생성자는 @Entity가 만들어주었으므로, 기본 생성자를 만들어주는 역할을 하는 @NoArgsConstructor 는 필요없는 것 아닌가요?그런데 @NoArgsConstructor까지 사용해야 에러가 발생하지 않습니다.@Builder를 사용한 클래스에 어떠한 생성자도 없다면 클래스의 모든 필드를 매개변수로 가지는 private 생성자를 만들어주는 것이 맞나요?이것이 맞다면 2번의 질문과 반대로, @Builder 를 사용했기 때문에 @AllArgsConstructor 가 담당하는 모든 필드에 대한 생성자가 만들어져있으므로 @NoArgsConstructor 만 사용하면 되는 것 아닌가요?여기에서도 @AllArgsConstructor 까지 사용해주어야 에러가 발생하지 않습니다.질문이 좀 많은데 요약하자면, 빌더 패턴을 사용하려고 할때, @Entity, @Builder, @NoArgsConstructor, @AllArgsConstructor 이 네개의 어노테이션을 왜 꼭같이 사용해야 하는지가 궁금합니다. 감사합니다!
-
미해결비전공자도 이해할 수 있는 Docker 입문/실전
스프링부트,Mysql작업시 빌드
안녕하세요 강의 듣다 궁금한 점이 생겨서 질문 남깁니다! 스프링 부트,mysql 을 이용하여 프로젝트 작업 진행하기 위해 작업 진행전 docker로 초기 환경 세팅을 하고 두가지 동시에 띄우는 작업을 했습니다! 도커 연결전에는 IDE에서 run버튼을 눌러 작업 확인을 했었는데, 지금은 빌드 하고, compose up해서 확인을 해야하는걸까요? run버튼 누르니까 에러가 뜹니다.
-
미해결
자취러 팀에서 팀원 구하고 있습니다!
❗프로젝트 주제 : 공개SW를 이용한 자취 관련 앱 서비스❗예상 프로젝트 일정 : ~ 9월❗예상 모집인원 : 디자이너: 1명, 백엔드: 1명❗현재 팀 구성 현황 : 백엔드 2명(Spring Boot), 프론트엔드(Flutter) : 2명 디자이너: 1명❗현재 진행 상황 : 기획 중 입니다❗프로젝트 관련 주의사항 : 다들 으쌰으쌰 함께해요안녕하세요 !! 🙇♂🙇♂공개SW 개발자대회에 나갈 팀원을 모집하고 있습니다.2024년 18회를 맞이하는 국내 최대 규모 ‘공개SW 도전의 장’입니다.공개SW에 대한 기본적인 개념과 이해, GitHub 등 필요한 지식을 강의로 제공하며프로젝트 기획, 개발, 구현, 협업 등의 개발 경험과 기능 테스트, 라이선스 검증을 통해공개SW의 전반적인 개발 과정을 경험할 수 있다고 합니다UI/UX디자이너 구하고 있습니다! 관심 있으신 분들은 오픈 채팅 방으로 깃허브 링크 보내주시면 감사하겠습니다 :)많은 관심 부탁 드리겠습니다!!https://open.kakao.com/o/sGQpBNtg
-
미해결
RestController와 view 관련하여 질문있습니다.
안녕하세요.개인 프로젝트를 진행하다 이해가 안되는 부분이 있어서 질문드립니다.맛집 서비스를 위한 REST API (HTTPS)를 구성하는 프로젝트로,맛집 정보들은 DB를 사용하여 관리REST API는 CRUD 연산을 제공할 것입니다. 일단 프론트단을 제외하고 백만 개발한거라 @RestController를 사용해서 테스트를 끝냈는데, 이제 프론트까지 개발하려고 하니 @RestController는 json 형식으로 데이터를 받잖아요. 화면을 생성해야하는데 @RestController와 별개로 새로운 클래스를 생성하여 @Controller를 붙여 뷰단만 따로 관리하는 컨트롤러를 생성하는게 좋을까요? @RestController는 REST API를 관리하는 컨트롤러, @Controller는 화면단만 관리하는 컨트롤러로 각각 생성하는게 좋은건지 아니면 개발했던 @RestController에 ModelAndView를 활용하는 것 중 뭐가 더 나은건지? 궁금해요. 찾아보니 RestController에 화면을 줄때 자바스크립트나 ajax를 사용하는 방법이 있긴한데 보통 뭐를 더 사용하고 뭐가 더 좋은지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
start.spring.io 에서 dependencies 에 아무것도 추가를 안하면
start.spring.io 에서 dependencies 에 아무것도 추가를 안하면 spirng 프레임워크를 사용하는 것이 되나요 ? 아니면 start.spring.io 에서 dependencies 여부 상관없이 여기서 프로젝트를 다운받고 하게 되면 다 spring boot 프레임워크인건가요 ?
-
미해결
MariaDB에 회원가입 정보가 안 들어가집니다.
안녕하세요. 스프링부트와 리액트를 이용해 웹앱을 만들고 있는데요, mariadb를 연결해서 회원가입 정보를 저장하려고 하는데 저장이 안 됩니다. 잘 아시는 분들 코드 한번만 봐주실 수 있을까요? 인터넷과 GPT 모두 이용해보아도 해결이 안 되네요 너무 간절합니다 ㅠㅠ 부탁드립니다. User.javapackage com.dohwaji.model; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @Entity @Table(name = "users") @Data @AllArgsConstructor @Builder public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String password; public User() { } public User(String username, String password) { this.username = username; this.password = password; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } UserService.javapackage com.dohwaji.service; import com.dohwaji.model.User; import com.dohwaji.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import java.util.Optional; @Service public class UserService { @Autowired private final UserRepository userRepository; @Autowired private BCryptPasswordEncoder bCryptPasswordEncoder; public UserService(UserRepository userRepository) { this.userRepository = userRepository; } public User registerUser(User user) { user.setPassword(bCryptPasswordEncoder.encode(user.getPassword())); return userRepository.save(user); } public User authenticate(String username, String password) { Optional<User> optionalUser = userRepository.findByUsername(username); if (optionalUser.isPresent() && bCryptPasswordEncoder.matches(password, optionalUser.get().getPassword())) { return optionalUser.get(); } return null; } public User createUser(String username, String password) { User user = new User(username, password); return userRepository.save(user); } } UserRepository.javapackage com.dohwaji.repository; import com.dohwaji.model.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.Optional; @Repository public interface UserRepository extends JpaRepository<User, Long> { Optional<User> findByUsername(String username); } AuthController.javapackage com.dohwaji.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import com.dohwaji.service.UserService; import jakarta.servlet.http.HttpServletRequest; import com.dohwaji.repository.UserRepository; import com.dohwaji.model.User; @RestController // REST API 컨트롤러임 @RequestMapping("/api/auth") // 이 컨트롤러의 기본 URL 경로 public class AuthController { @Autowired // UserService 클래스의 인스턴스가 주입 private UserService userService; // 사용자 관련 비즈니스 로직을 담당하는 서비스 계층 @PostMapping("/login") // HTTP POST 요청이 /api/auth/login 으로 들어오면 이 메서드가 실행됨 public ResponseEntity<?> login(@RequestBody User loginRequest) { // login()메서드는 사용자 이름과 비밀번호를 받아 UserService의 authenticate()메서드를 호출 User user = userService.authenticate(loginRequest.getUsername(), loginRequest.getPassword()); if (user != null) { // 토큰 발행 로직 추가 가능 return ResponseEntity.ok(user); // 사용자 인증에 성공하면 사용자 정보를 포함한 HTTP 200 OK 응답을 반환 } else { return ResponseEntity.status(401).body("Invalid credentials"); // 사용자 인증에 실패하면 HTTP 401 Unauthorized 응답을 반환 } } @PostMapping("/register") // HTTP POST 요청이 /api/auth/register 로 들어오면 이 메서드가 실행됨 public ResponseEntity<?> register(@RequestBody User registerRequest, HttpServletRequest request) { // register() 메서드는 사용자 정보를 받아 UserService의 registerUser() 메서드를 호출 User user = userService.registerUser(registerRequest); request.getSession().setAttribute("currentUser", user); // 로그인 된 사용자 정보를 세션에 저장 return ResponseEntity.ok(user); // 회원가입에 성공하면 새로 생성된 사용자 정보를 포함한 HTTP 200 OK 응답을 반환 } @GetMapping("/logout") public String logout(HttpServletRequest request) { request.getSession().invalidate(); // 세션 무효화 return "redirect:/"; // 메인 페이지로 리다이렉트 } } build.gradleplugins { id 'java' id 'org.springframework.boot' version '3.2.5' id 'io.spring.dependency-management' version '1.1.4' } group = 'com.dohwaji' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.security:spring-security-crypto' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.mariadb.jdbc:mariadb-java-client' implementation 'jakarta.persistence:jakarta.persistence-api:3.1.0' } tasks.named('test') { useJUnitPlatform() }
-
미해결
웹 앱 로그인 유지 방법
안녕하세요. 웹앱 기반의 앱을 만들고 있는 초급 개발자입니다. js에 있는 특정 로그인 암호화 알고리즘을 전부 kotlin에서 재정의하려하니 너무 골이 아파져서 방향을 어떻게 잡아야 할지 우선 여쭤보고 가는게 좋겠다고 생각하여 질문 남기게 되었습니다.우선 제가 생각한 방법들을 이렇습니다. 로그인 기능만 네이티브앱에서 구현(암호화 알고리즘 kotlin으로 재정의)해당 js함수를 사용하는 웹을 컨트롤러에서 호출하고, 응답만을 가져와서 Android 클라이언트에 반환위 두 가지를 일단 시도중인데 2번 방식이 쉽지가 않네요. 애초에 가능한건지도 확실치가 않아 보입니다.이런 고민을 해보신 적이 있다면 부디 조언 부탁드리겠습니다.
-
미해결토비의 스프링 부트 - 이해와 원리
@ConditionalOnMissingBean 관련 질문이 있습니다!
안녕하세요 토비님. 강의 잘 듣고있습니다.@ConditionalOnMissingBean 강의를 듣던중 궁굼한점이 생겨 질문을 남기게되었습니다.아래와 같이 두개의 클래스가 존재할때, Profile 을 "study" 로 설정하고 스프링부트를 실행하면 의도대로 A 만 생성되고 "study" 가 아닐경우 B 가 생성되는것을 확인했습니다. 그런데 스프링부트에서는 항상 @Profile 이 붙은 A 클래스의 빈을 먼저 생성하고 그 이후 B 클래스의 @ConditionalOnMissingBean 조건이 수행된다는 보장이 되어있는지 궁굼합니다!나름대로 검색을 해보았지만 관련 지식이 부족해서인지 적절한 키워드가 떠오르지않아 정보를 찾을수가 없어 질문을 드립니다!@Service @Profile("study") class A { ... }@Service @ConditionalOnMissingBean("A") class B { ... }
-
미해결
spring GCP 배포 mysql 문제
현재 spring boot 프로젝트를 GCP를 통해 배포하는 중인데요,rds 만들어서 연동도 잘 해두었고 ssh로 들어갔을때 mysql 연동도 잘 됩니다.근데 jar 파일로 서버를 실행하려고 할 때 이런 에러가 나더라구요ㅜㅜ 찾아보니까 mysql 연동 문제라고 하던데 아무리 봐도 모르겠습니다...제발 도와주세요ㅜㅜㅜ
-
미해결
Spring boot redirect
Spring boot redirect질문입니다. 최근 spring boot, thymleaf를 사용하여 사이드 프로젝트를 진행중에 있습니다. spring boot서버를 클라우드에 배포를 하고 서비스를 테스트 과정에서 클라이언트의 요청에 따라 api를 통해 redirect를 하는 과정이 있습니다. 문제는 redirect를 하게되면 배포 서버 도메인으로 요청 되는것이 아니라 localhost로 요청이 되어 원하는 화면으로 넘어가지 않습니다. 예를 들어 (1) https://port-0-teammatchservice-1cupyg2klvm5dc4u.sel5.cloudtype.app/(2) https://localhost:8080/첫번째 주소로 redirect를 해야되는데 두번째 주소로 리다이렉트가 됩니다. 메인 페이지에서 다른 페이지로 넘어가는 거는 문제가 없지만 redirect를하게 되면 도메인이 localhost로 바뀌어서 문제가 되고 있습니다. 그래서 이 문제를 해결하기 위해서 RedirectView를 사용해서 배포서버 도메인에 맞게 url을 수정하여 요청하는 방식을 하려고 합니다. 혹시 이 방법 말고 일괄적으로 redirect의 도메인 주소를 바꿀 수있는 방법이 있을까요?없다면 이 상황에서는 어떤 방법으로 하는게 좋을까요?
-
미해결
이전 로그인 시간 팝업
안녕하세요 영한님 수업을 듣다가 관리자 페이지를 만들어보면서 듣고 있는데요제가 이것저것 찾아보면서 다른 기능들을 넣으면서 공부를 하고 있습니다.하지만 의문점이 하나가 생겼습니다. 로그인, 로그아웃까지 구현을 했으나,이전에 로그인한 시간 팝업에 띄우고 싶은데 Session으로 하면 정해진 시간까지 Session이 동작하여서 이것을 쓰면 안 될 것 같은데요 어떤 기능을 공부해서 사용해야 하나요?
-
해결됨
Cannot resolve symbol 'SpringBootApplication'
인터넷에서 찾아본 해결책을 다 시도해 봐도 해결이 안되네요 ㅠㅠ Try it “File ▸ Invalidate Caches/Restart ▸ Invalidate And Restart” 시도해 보아도 안됨. Gradle에서 Reload All Gradle Projects를 해보아도 안됨.File → Project Structure 를 클릭한 후에 "Project Settings" 에 Project SDK 가 제대로 설정되었는지 확인해 봐도 안됨.Settings → "Build, Execution, Deployment" → "Build Tools" → Gradle 에 들어가 버전 확인해 봐도 안됨.
-
해결됨실전! Querydsl
querydsl Projection 성능 문제
안녕하세요 Querydsl Projection 을 활용해 DTO에 담는경우 성능 관련 질문이 있습니다. Querydsl에서 Projections.constructor를 활용해서 query를 작성하는경우 fetchJoin이 되지 않더라구요.일대 다 관계에서 fetchJoin을 하지 않게되면 n+1 이슈가 발생할거 같은데Projections을 활용하는 환경에서 성능개선은 어떻게 해야할까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2 Driver 서버 연결 오류가 발생합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 돌고래 새로고침 누르고 실행 시켜 보니 오류가 발생합니다
-
미해결
스프링 사용 중 생기는 오류
안녕하세요spring tools4를 설치하였고 돌아가는지 확인하고 싶어 확인하는 도중에 오류가 걸려서 글 올립니다.java는 11로 사용하였고demo1는 local로 실행했을 때 Exception in thread "main" java.lang.UnsupportedClassVersionError: org/springframework/boot/SpringApplication has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0오류가 떠서 java버전이 다르다는 것을 알기는 알아냈지만 인터넷으로 검색한 방법을 다 써봐도 해결이 안됐습니다.사용한 방법은 build path에서 jre system library로 해보았고 installed jres도 제대로 해두었습니다.compiler에도 11로 표시하였는데 혹시 다른 추가적이 방법이 있을까요
-
미해결
[vscode] spring boot 실행시 profile에러
Error: Main method not found in the file, please define the main method as: public static void main(String[] args) 금요일까지만 해도 실행 잘 됐던게 오늘 실행하니까 이런 메시지가 화면에 나와요 ㅜㅜ전에도 이런적 있었는데 껐다가 키면 해결 됐었거든요? 근데 이번엔 프로그램 껐다가 키고, 컴퓨터 껐다가 켜고 해봐도 해결이 되지 않네요 ㅜㅜㅜ 어떻게 해야하는지 아시는분 !!!! 도와주세요 코드에 main메서드 잘 구현되어있는데 왜 인식을 못하는지 모르겠어요
-
미해결
Spring boot에서 일반 예외처리와 api예외처리 한번에 하는 좋은 방법 없을까요?
@Slf4j @ControllerAdvice @RequiredArgsConstructor public class ExceptionControllerAdvisor { private final HttpServletRequest httpServletRequest; private final HttpServletResponse httpServletResponse; @ExceptionHandler(RollbackTriggeredException.class) public ResponseEntity<ErrorResponse> rollBackException(RollbackTriggeredException e) throws IOException { if (httpServletRequest.getRequestURI().startsWith("/api")) { int statusCode = e.getStatusCode(); ErrorResponse body = ErrorResponse.builder() .code(String.valueOf(statusCode)) .message(e.getMessage()) .validation(e.getValidation()) .build(); return ResponseEntity.status(statusCode) .body(body); } else { httpServletResponse.sendError(e.getStatusCode()); return null; } } } spring boot와 thymeleaf를 사용해서 이런식으로 api 요청일 경우 해당 요청 uri의 앞에 api를 넣어서 api가 앞에있으면 ResponseEntity객체를 이용해서 RuntimeException을 상속받은 커스텀 예외(RollbackTriggeredException)을 처리하고, api 가 없다면 HttpServletResponse객체의 sendError 메서드를 사용해서 에러를 발생시킨다음 Spring boot의 예외처리 매커니즘을 통해 에러페이지로 이동하도록 코드를 짜보았습니다. 하지만 else부분에 else를 작성해줘야한다는 점이 좀 좋지 않은 코드는 아닐까 하는 생각이들게 되더라고요??일반예외(페이지 이동하다 예외가 발생했을경우)와 api예외(ajax요청하다 예외가 발생했을 때)를 동시에 처리하는 좋은 방법있으면 알려주신다면 감사하겠습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
여러 패키지들 does not exist 오류
안녕하세요 김영한님! 강의 아주 잘 듣고있습니다!! 현재 김영한님 첫번째 강의를 다 듣고 저 혼자 만들어보고 싶은게 생겨서 만드는중인데요 현재 제가 군대에 있어서 사지방에서 코딩을 하느라 인텔리제이를 사용하지 못하고 깃허브에서 제공하는 codespaces와 gitpod을 사용하여 vscode 환경에서 코딩하는 중입니다. 근데 jpa의 JpaRepository나 lombok 혹은org.springframework.boot.autoconfigure.SpringBootApplication 이런 패키지들이 계속 does not exist라고 뜹니다. 김영한님꺼 따라할때는 잘 됐는데 이제 제가 혼자서 만들고 싶은거 만드려니 확실하지도 않고 실행도 잘 안돼서 패키지를 못읽는건지도 잘 모르겠습니다. 현재 build.gradle에 의존성도 다 넣어있고 vscode의 패키지 설치에도 java extention pack, lombok, spring extention pack또 다 깔았습니다. 당연 재설치도 해보았구요! 구글링을 지금 며칠째 하고있는데 도저히 안되서 여기에 질문 올려봅니다...springboot version : 3.1.3jdk version : 17