묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
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() }
-
해결됨
spring에서 Entity작성 후 [Table ' ' doesn't exist] 오류
영화 예매 관련 Entity를 작성 후 DB확인차 실행했는데 다른 Entity는 테이블이 잘 만들어진 것을 확인할 수 있었지만 이상하게 Seat Entity만 테이블이 만들어지지 않았습니다. WARN 3508 --- [Movie Ticketing] [ restartedMain] o.m.jdbc.message.server.ErrorPacket : Error: 1146-42S02: Table 'ticketing.seat' doesn't exist WARN 3508 --- [Movie Ticketing] [ restartedMain] o.h.t.s.i.ExceptionHandlerLoggedImpl : GenerationTarget encountered exception accepting command : Error executing DDL " alter table seat add constraint FKgik5885qsff01sxe7v3kqjrhx foreign key (theater_id) references theater (theater_id)" via JDBC [(conn=216) Table 'ticketing.seat' doesn't exist] org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " alter table seat add constraint FKgik5885qsff01sxe7v3kqjrhx foreign key (theater_id) references theater (theater_id)" via JDBC [(conn=216) Table 'ticketing.seat' doesn't exist]at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:94) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final] at org.hibernate.tool.schema.internal.Helper.applySqlString(Helper.java:233) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final] at org.hibernate.tool.schema.internal.Helper.applySqlStrings(Helper.java:217) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final] at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createForeignKeys(SchemaCreatorImpl.java:303) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final] at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:250) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final] at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:172) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final] at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:142) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final] at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:118) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final] at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:256) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final] at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:145) ~[hibernate-core-6.4.4.Final.jar:6.4.4.Final]application.yml은ddl-auto.create입니다. 대소문자 구분이 문제인가 싶어 @Table(name = "seat")도 추가하고 lower_case_table_names = 1인 것도 확인했는데 똑같이 에러가 발생하더라구요하루종일 찾아봐도 이유를 잘 모르겠습니다 왜그런걸까요 ㅠㅠㅠSeat Entity 코드는 아래와 같습니다.@Entity @Table(name = "seat") class Seat { val row : String? = null val column : Int? = null //좌석 선택 @Enumerated(EnumType.STRING) val selectStatus : SelectStatus? = null // POSSIBLE, IMPOSSIBLE @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "theater_id") val theater : Theater? = null @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "seat_id") val id : Long = 0L }
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
nestjs typeorm 에서 mariadb 고가용성 galera cluster 적용 관련
nestjs 좋은 강의 잘 들었습니다.~ 감사합니다.다만 질문이 있습니다.기존코드를 nestjs로 마이그레이션 하고 있습니다.mariadb 고가용성 적용을 해야됩니다. 구글링을 해도 해당 관련한 자료가 별로 없어서 질문드립니다.typeorm type을 보면 replication으론 mater, salves 필드로 고가용성이 지원되는데 cluster 구조로 지원이 되는게 맞는지 알고 싶습니다.아직 응용은 못하는 단계라서 질문 드립니다.만약 typeorm에서 cluster 지원이 되지 않는다면 어떤 방법으로 할 수 있나요?
-
미해결C# WPF .NET Core(7.0)
소스프로그램 및 교육 교재
프로그램 소스코드와 교재는 어디서 구하나요?
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
docker mysql or mariadb 실행 에러 참고하세요
mariadb 최신버전 사용시 Dockerfile 그대로 작성시 실행 에러가 발생합니다.저는 sql 을 백업해서 스키마랑 테이블 새로 만들도록 수정해서 해결했습니다.추가로 실행후 mysql 접속도 mysql 명령어가 아닌 mariadb 로 작성하셔야 됩니다.mariadb -h127.0.0.1 -uroot -pmysqldump -u root -p mydb > mydb.sqlFROM mariadb ENV MYSQL_ROOT_PASSWORD test1357 ENV MYSQL_DATABASE mydb COPY ./mydb.sql /docker-entrypoint-initdb.d/ EXPOSE 3306
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Orders Microservice 수정 - MariaDB 강의에서 order-service 실행이 안됩니다..
안녕하세요 강사님 강의 잘 보고 있습니다. https://www.inflearn.com/questions/641464제가 예전에 위에 링크로 질문을 했었는데.. 아직까지도 해결이 되지 않아서 다시 메일을 보냅니다.지금은 전에 질문 했던 것 과 조금 다른 상황이라 위에 링크는 잊으셔도 됩니다.현재 데이터 동기화를 위한 Apache Kafka의 활용 ②Orders Microservice 수정 - MariaDB 부분을 수강중입니다. 현재 mariadb를 연결시키면 order-service가 실행 안되는 문제입니다.당연히 콘솔과 heidisql에서 mariadb 접속이 아주 잘됩니다. 문제는order-service에 mariadb 를 설정하고 실행시켰는데 다음과 같은 에러가 발생하면서 실행이 안됩니다.java.sql.SQLInvalidAuthorizationSpecException: Could not connect to address=(host=localhost)(port=3307)(type=master) : (conn=3) Access denied for user 'root'@'localhost' (using password: YES)Current charset is UTF-8. If password has been set using other charset, consider using option 'passwordCharacterEncoding' 그래서 grant all privileges on root.* to root@'localhost' identified by '비밀번호입력';grant all privileges on root.* to root@'%' identified by '비민번호입력';해서 다음과 같은 상태를 만들었습니다.그럼에도 불구하고 order-service를 실행시키면 실행이 되지 않습니다..분명히 명령프롬프트 창으로도 heidisql 같은 툴로도 접속이 아주 잘됩니다.해결책은 에러 검색해보면 나오는 해결책은 제가 적용한 해결책하고 동일합니다..전에 안되면 order-service 압축파일을 메일로 보내다랄고 하셔서 도저히 해결이 안되서 메일 한번 보내봅니다..메일 한번 확인해 주시면 감사하겠습니다.
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
마리아db 문의
안녕하세요 강사님 장고 데이터베이서 중에서 mariadb는 혹시 지원을 못하는걸까요? 사용가능한 리스트에 없어서 문의드립니다!
-
미해결시스템엔지니어가 알려주는 리눅스 실전편 Bash Shell Script
DB 백업 쉘 스크립트 오류 문의
아래와 같이 오류 발생합니다. [00] FATAL ERROR: 2021-12-03 01:56:26 Can't open backup-my.cnf for reading 해결 방법 좀 알려 주세요~ [root@cent2 BACKUP]# ./db_backup.sh 백업 디렉토리가 있어요. 문제없음. [00] 2021-12-03 01:56:26 Connecting to MySQL server host: localhost, user: not set, password: not set, port: not set, socket: not set [00] 2021-12-03 01:56:26 Failed to connect to MySQL server: Access denied for user ''@'localhost' (using password: NO). /usr/bin/mariabackup based on MariaDB server 10.3.28-MariaDB Linux (x86_64) [00] 2021-12-03 01:56:26 cd to /root/SHELL/BACKUP/xtrabackup_backupfiles/ [00] 2021-12-03 01:56:26 open files limit requested 0, set to 1024 [00] FATAL ERROR: 2021-12-03 01:56:26 Can't open backup-my.cnf for reading /usr/bin/tar: Cowardly refusing to create an empty archive Try '/usr/bin/tar --help' or '/usr/bin/tar --usage' for more information. /usr/bin/ls: cannot access '/mnt/BACKUP/cent2/2021.12.03_cent2_DB.tgz': No such file or directory /usr/bin/ls: cannot access '/mnt/BACKUP/cent2/2021.12.03_cent2_DB.tgz': No such file or directory
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
안녕하세요! 질문이 있습니다.
안녕하세요! 좋은강의 감사드립니다 :) 해당 강의를 보면서 궁금한 사항이 있어 질문드립니다. 다음과 같이 강의내용과 동일하게 Dockerfile을 작성하고 FROM mariadb ENV MYSQL_ROOT_PASSWORD test1357 ENV MYSQL_DATABASE mydb COPY ./mysql_data/mysql /var/lib/mysql EXPOSE 3306 ENTRYPOINT ["mysqld", "--user=root"] build -> run 한 결과 container가 exited 상태가 되었고, 로그를 확인해보니 2021-05-22 6:01:48 0 [Note] Plugin 'FEEDBACK' is disabled. 2021-05-22 6:01:48 0 [ERROR] Could not open mysql.plugin table: "Table 'mysql.plugin' doesn't exist". Some plugins may be not loaded 2021-05-22 6:01:48 0 [ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist 2021-05-22 6:01:48 0 [Note] Server socket created on IP: '::'. 2021-05-22 6:01:48 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.db' doesn't exist 2021-05-22 6:01:48 0 [ERROR] Aborting 다음과 같은 에러가 발생했습니다. 혹시, 별다른 추가 설정이 더 필요한 것일까요?